ryannielson / prez
轻松为您的对象创建演示者。
Requires
- php: >=5.4.0
- illuminate/console: ~5.0
- illuminate/support: ~5.0
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-28 16:36:15 UTC
README
#Prez
为您的PHP或Laravel项目提供简单的演示者。
为什么我应该使用演示者?
想象一下,您的应用程序有一个User
模型。使用Prez,您将创建一个匹配的UserPresenter
类。这个演示者封装了模型,仅处理展示相关的问题。这使任何与视图相关的逻辑都不在模型中,同时也帮助您将逻辑保持在视图之外。在您的视图中,您可以像使用原始模型一样使用演示者。每当您开始考虑创建辅助函数或在视图中添加逻辑时,将其移动到演示者中可能是有益的。
安装
在终端中运行以下Composer命令,或将"ryannielson/prez": "~1.0.0"
添加到您的composer.json文件中
composer require ryannielson/prez:'~1.0.0'
完成后,如果您使用Laravel,您现在必须将服务提供程序添加到app/config/app.php
中的提供程序数组中
'RyanNielson\Prez\PrezServiceProvider'
使用方法
创建演示者
演示者继承自RyanNielson\Prez\Presenter
,应按其展示的模型命名。在Laravel中,这些应位于app/presenters
目录中。
// app/presenters/UserPresenter.php class UserPresenter extends RyanNielson\Prez\Presenter { }
Laravel命令
Prez包含一个命令来自动创建演示者。
在app/presenters
中创建一个名为UserPresenter
的演示者
php artisan prez:presenter User
在app/custom
中创建一个名为UserPresenter
的演示者
php artisan prez:presenter User --path=app/custom
在演示者中访问对象
您可以通过使用$this->object
在演示者中访问封装的对象。这允许您获取对象的任何公共属性或调用任何公共函数。
class UserPresenter extends RyanNielson\Prez\Presenter { public function fullName() { return $this->object->firstName . ' ' . $this->object->lastName; } }
您还可以使用演示者上的presents
属性,以便您可以使用不同于$this->object
的名称来访问对象。这使得演示者代码更清晰。
class UserPresenter extends RyanNielson\Prez\Presenter { // This allows us to use $this->user instead of $this->object protected $presents = 'user'; public function fullName() { return $this->user->firstName . ' ' . $this->user->lastName; } }
获取对象的演示者
默认情况下,Prez假定您的演示者类使用您的对象的类名后跟演示者。例如,具有User
类的对象假定有一个相应的UserPresenter
类。presenter
辅助方法使用此假设来查找您的演示者并返回其实例。
$user = new User; $userPresenter = presenter($user); // Returns an instance of UserPresenter
presenter
还接受一个可选的类名,如果您想强制使用特定的演示者。
$user = new User; $userPresenter = presenter($user, 'AdminPresenter'); // Returns an instance of AdminPresenter
如果您不希望使用辅助函数,可以在构造演示者时显式传递您的对象。
$user = new User; $userPresenter = new UserPresenter($user);
在视图中使用演示者
如果您将演示者对象传递到视图中,您可以使用演示者像使用任何其他对象一样。以下示例假设使用Laravel的blade模板语言。
<!-- Assuming you have a $userPresenter available in the view. --> <h1>{{ $userPresenter->fullName() }}</h1>
委托到对象
如果演示者不包含属性或方法,调用将被委托到封装的对象。这使得如果我们想访问模型上的字段,我们不必在演示者中编写函数。
class User { public $name = 'Ryan'; public function language() { return 'PHP'; } } class UserPresenter extends RyanNielson\Prez\Presenter { } $userPresenter = new UserPresenter(new User); // Since no method or property exists on presenter, these flow to the object. $userPresenter->name; $userPresenter->language();