Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork5
Decorate Your Models and Write Clean/Reusable Code with Presenters.
License
coderflexx/laravel-presenter
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A clean way to present your model attributes without putting them in the wrong file.
You can install the package via composer:
composer require coderflexx/laravel-presenter
You can publish the config file with:
php artisan vendor:publish --provider="Coderflex\LaravelPresenter\LaravelPresenterServiceProvider"
This is the contents of the published config file:
return [/* |-------------------------------------------------------------------------- | Presenter Namespace |-------------------------------------------------------------------------- | | This value informs LaravelPresenter which namespace you will be | selecting to store your presenters by default. | If this value equals to null, "App\Presenter" will be used | by default. | */'presenter_namespace' =>'App\\Presenters',];
The implementation of this package is so simple, all what you need to do is the following:
- Implement
CanPresent
Interface - Use
UsesPresenters
Trait
useCoderflex\LaravelPresenter\Concerns\CanPresent;useCoderflex\LaravelPresenter\Concerns\UsesPresenters;// ...class Userextends Authenticatableimplements CanPresent{use UsesPresenters;// ...}
This package gives you an easy way to generate newPresenter
class, all you need to do is to usepresenter:make
command.
php artisan presenter:make UserPresenter
UserPresenter
in our case, leaves by default inApp\Presenters
.
This is the contents of theUserPresenter
file:
<?phpnamespaceApp\Presenters;useCoderflex\LaravelPresenter\Presenter;class UserPresenterextends Presenter{//}
If you want to change the directory, you have two options.
First options is to set the full namespace while you're creating the presenter class
php artisna presenter:make App\Models\Presenter\UserPresenter
Or changepresenter_namespace
fromconfig/laravel-presenter
file.
return [ ...'presenter_namespace' =>'App\\Presenters', ...];
After you create the presenter class, you need to register it on theModel
by adding the$presenters
protected property:
useApp\Presenters\UserPresenter;useCoderflex\LaravelPresenter\Concerns\CanPresent;useCoderflex\LaravelPresenter\Concerns\UsesPresenters;// ...class Userextends Authenticatableimplements CanPresent{use UsesPresenters;protected$presenters = ['default' => UserPresenter, ];}
By default, the type of your presenter class isdefault
, but you can use as many of presenters you want, just by identifying the type in$presenters
property.
Now, after we generated thepresenter
class, and we implemented it successfully in our model, we can use it like so:
In yourUserPresenter
class or any presenter class you generated.
...class UserPresenterextends Presenter{publicfunctionfullName() {return"{$this->model->first_name}{$this->model->last_name}"; }}...
We add a new method to present thefullName
.
In your blade or any place you want, you can do:
$user->present()->fullName
Your application will show the full name from the method you added.
Like I said above, by default the type will bedefault
but, you can add more types as you need.
Here is an example:
useApp\Presenters\UserPresenter;useCoderflex\LaravelPresenter\Concerns\CanPresent;useCoderflex\LaravelPresenter\Concerns\UsesPresenters;// ...class Userextends Authenticatableimplements CanPresent{use UsesPresenters;protected$presenters = ['default' => UserPresenter,'setting' => UserSettingPresenter, ];}
Generate newUserSettingPresenter
php artisan presenter:make UserSettingPresenter
Add anything toUserSettingPresenter
method
...class UserSettingPresenterextends Presenter{publicfunctionlang() {return$this->model->settings->defaultLang; }}...
Finally, setsetting
as a type:
$user->present('setting')->lang;
By that, you can split your logic and make your code base even cleaner.
composertest
Please seeCHANGELOG for more information on what has changed recently.
Please seeCONTRIBUTING for details.
Please reviewour security policy on how to report security vulnerabilities.
The MIT License (MIT). Please seeLicense File for more information.
About
Decorate Your Models and Write Clean/Reusable Code with Presenters.
Topics
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors6
Uh oh!
There was an error while loading.Please reload this page.