hossam-tarek / laravel-presenter
介绍 Laravel 的 Presenter 模式实现
Requires
- php: ^7.2|^8.0
- illuminate/console: ^6.0|^7.0|~8.0|^9.0|^10.0
- illuminate/filesystem: ^6.0|^7.0|~8.0|^9.0|^10.0
- laravel/tinker: ^2.0
README
Laravel Presenter 包是一个优雅的解决方案,它将 Presenter 设计模式无缝集成到您的 Laravel 应用程序中。该包通过将数据格式化和操纵逻辑从模型和视图中分离出来,帮助提高代码库的可维护性和可读性。
内容
Presenter 模式的优势
Presenter 模式提供了几个关键优势
- 代码分离: Presenter 将数据操纵逻辑与您的模型分离,防止模型被与展示相关的代码所充斥。
- 更清洁的视图: 通过在 Presenter 中格式化数据,您的视图可以专注于显示数据而不是实现逻辑。
- 可重用性: Presenter 允许您在多个视图中重用相同的格式化逻辑,确保一致的数据表示。
- 可维护性: 将格式化逻辑隔离在 Presenter 中简化了未来的更改,使代码维护更加流畅。
安装
您可以通过执行以下命令轻松通过 Composer 安装 Laravel Presenter 包
composer require hossam-tarek/laravel-presenter
如果您使用的是 Laravel 5.5 之前的版本,请确保将 LaravelPresenterServiceProvider
包含在您的 config/app.php
文件中。
'providers' => [ // Other providers HossamTarek\LaravelPresenter\LaravelPresenterServiceProvider::class, ],
创建新的 Presenter
-
要创建一个新的 Presenter,您可以使用以下 Artisan 命令
php artisan make:presenter {className}
将
{className}
替换为您希望您的 Presenter 所使用的名称。此命令将在app/Presenters
目录下生成一个新的 Presenter 类。 -
通过将
HasPresenter
特性导入到您的模型中,并设置$presenterName
变量来关联 Presenteruse HossamTarek\LaravelPresenter\Traits\HasPresenter; use App\Presenters\OrderPresenter; class User extends Model { use HasPresenter; protected static $presenterName = UserPresenter::class; }
使用
避免在您的视图中重复以下逻辑,并违反 SOLID 原则
@if(empty($user_website_url)) <p>{{ $user->first_name }} {{ $user->last_name }}</p> @else <p> <a target="_blank" href="{{ $user->website_url }}"> {{ $user->first_name }} {{ $user->last_name }} </a> </p> @endif
使用命令 php artisan make:presenter UserPresenter
创建一个新的 UserPresenter
,并将展示逻辑放在其中。
然后将 UserPresenter
与 User
模型关联,并使用 HasPresenter
特性。
class User extends Model { use \HossamTarek\LaravelPresenter\Traits\HasPresenter; protected static $presenterName = UserPresenter::class; }
现在使用 UserPresenter
将展示逻辑从视图和模型中分离出来。
class UserPresenter extendsPresenter { protected $model; public function formattedName($class = '') { if (empty($user->website_url)) { return "<p class='{$class}'>{$user->first_name} {$user->last_name}</p>" } return <<<HTML <p class="{$class}"> <a target="_blank" href="{$user->website_url}">{$user->first_name} {$user->last_name}</a> </p> HTML; } }
现在您已经准备好释放 Presenter 模式的力量了。
在您的视图中
{!! $user->formattedName() !!}
如果没有参数,则使用更短的语法(蛇形命名法),不使用括号,就像它是对象的属性一样。
{!! $user->formatted_name !!}
如果您想为 p
标签添加更多自定义类。
{!! $user->formattedName("mx-2 my-3") !!}
贡献
我们非常重视您的贡献,因为我们共同努力增强 Laravel Presenter 包。请随时报告问题并提出改进建议,以解锁干净代码、组织结构以及提高可维护性的力量。
许可证
Laravel Presenter 包是在 MIT 许可下许可的开源软件。
鸣谢
Laravel Presenter 包由 Hossam Tarek 撰写和维护。