coderflexx / laravel-presenter
使用演示器编写干净/可重用的代码。
Requires
- php: ^8.0|^8.1
- illuminate/console: ^8.75|^9.0|^10.0|^11.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- nunomaduro/collision: ^5.10|^6.1|^7.0|^8.1
- nunomaduro/larastan: ^1.0|^2.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^1.22|^2.34
- pestphp/pest-plugin-laravel: ^1.3|^2.3
- phpstan/extension-installer: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5|^10.0
README
以干净的方式展示模型属性,而不将其放入错误的文件中。
安装
您可以通过composer安装此包
composer require coderflexx/laravel-presenter
您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="Coderflex\LaravelPresenter\LaravelPresenterServiceProvider"
这是发布配置文件的内容
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', ];
使用
此包的实现非常简单,您需要做的只是以下几步
模型实现
- 实现
CanPresent
接口 - 使用
UsesPresenters
特性
use Coderflex\LaravelPresenter\Concerns\CanPresent; use Coderflex\LaravelPresenter\Concerns\UsesPresenters; // ... class User extends Authenticatable implements CanPresent { use UsesPresenters; // ... }
创建新的模型演示器类
此包为您提供了一种简单的方式来生成新的 Presenter
类,您只需要使用 presenter:make
命令。
php artisan presenter:make UserPresenter
在我们的例子中,UserPresenter
默认位于 App\Presenters
。
这是 UserPresenter
文件的内容
<?php namespace App\Presenters; use Coderflex\LaravelPresenter\Presenter; class UserPresenter extends Presenter { // }
如果您想更改目录,您有两个选项。
第一个选项是在创建演示器类时设置完整的命名空间
php artisna presenter:make App\Models\Presenter\UserPresenter
或者更改 config/laravel-presenter
文件中的 presenter_namespace
。
return [ ... 'presenter_namespace' => 'App\\Presenters', ... ];
使用生成的 Presenter
类
在您创建了演示器类之后,您需要在 Model
上注册它,通过添加受保护的属性 $presenters
。
use App\Presenters\UserPresenter; use Coderflex\LaravelPresenter\Concerns\CanPresent; use Coderflex\LaravelPresenter\Concerns\UsesPresenters; // ... class User extends Authenticatable implements CanPresent { use UsesPresenters; protected $presenters = [ 'default' => UserPresenter, ]; }
默认情况下,您的演示器类的类型是 default
,但您可以使用任意多的演示器,只需要在 $presenters
属性中识别类型。
示例
现在,在我们生成了 presenter
类并成功在我们的模型中实现它之后,我们可以这样使用它
在您的 UserPresenter
类或任何您生成的演示器类中。
... class UserPresenter extends Presenter { public function fullName() { return "{$this->model->first_name} {$this->model->last_name}"; } } ...
我们在其中添加了一个新的方法来展示 fullName
。
在您的 blade 或任何您想使用的地方,您可以这样做
$user->present()->fullName
您的应用程序将从您添加的方法中显示全名。
添加另一种演示器类型
正如我上面说的,默认类型将是 default
,但是,您可以添加更多类型,只要您需要。
以下是一个示例
use App\Presenters\UserPresenter; use Coderflex\LaravelPresenter\Concerns\CanPresent; use Coderflex\LaravelPresenter\Concerns\UsesPresenters; // ... class User extends Authenticatable implements CanPresent { use UsesPresenters; protected $presenters = [ 'default' => UserPresenter, 'setting' => UserSettingPresenter, ]; }
生成新的 UserSettingPresenter
php artisan presenter:make UserSettingPresenter
向 UserSettingPresenter
方法添加任何内容
... class UserSettingPresenter extends Presenter { public function lang() { return $this->model->settings->defaultLang; } } ...
最后,将 setting
设置为类型
$user->present('setting')->lang;
通过这种方式,您可以分割您的逻辑并使您的代码库更加干净。
测试
composer test
变更日志
请参阅变更日志,获取有关最近更改的更多信息。
贡献
请参阅贡献指南,获取详细信息。
安全漏洞
请查看我们的安全策略,了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。