轻松为您的对象创建演示者。

2.0.0 2015-07-09 18:44 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:36:15 UTC


README

#Prez

Build Status Total Downloads Latest Stable Version Latest Unstable Version License

为您的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();