jackthedev / presenter
Requires
- php: >=5.5.9
- illuminate/support: 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
This package is not auto-updated.
Last update: 2024-09-19 20:04:59 UTC
README
Laravel 5 视图展示器,最初是在Laracasts关于同一主题的视频教程之后开发的:[从零开始创建视图展示器](https://laracasts.com/lessons/view-presenters-from-scratch)。
展示器允许你在视图文件中操作任何形式的数据。一个简单的例子是,如果你有一个用户实体,其中包含姓氏和名字字段,你如何在你的视图文件中简单地显示用户的完整姓名?最常见的方法可能是以下这样:
<h1>Hello, {{ $user->first_name }} {{ $user->last_name }}!</h1>
这当然可以工作,但每次你需要显示用户的完整姓名时,你都必须输入这些内容。如果它像这样会怎样呢?
<h1>Hello, {{ $user->present()->fullName }}!</h1>
这难道不是比上一个例子更易读吗?现在你可能会争辩说,你可以在模型类中直接添加这种类型的逻辑,你当然可以,但你很快会发现你的模型类充满了处理视图逻辑的方法。我不认为模型实体应该负责这些。它们的唯一任务是从数据库中提取所需数据并将其传递出去。就这些。
快速安装
首先通过Composer安装此包。
composer require jackthedev/presenter=~2.0
就这样!有了咖啡在手,开始构建一些出色的展示器吧!
用法
1. 引入特性
在你的模型中,简单地引入Jackthedev\Presenter\Traits\PresentableTrait特性,它将自动实例化Jackthedev展示器类。
...
use Jackthedev\Presenter\Traits\PresentableTrait;
class Example extends Eloquent
{
use PresentableTrait;
...
}
2. 定义你的展示器类
定义一个受保护的$presenter变量,指向你的展示器类的命名空间。
...
use Jackthedev\Presenter\Traits\PresentableTrait;
class Example extends Eloquent
{
use PresentableTrait;
protected $presenter = 'App\Presenters\Page';
...
}
3. 创建你的展示器类
创建一个新类,如你在模型中先前定义的那样 - 在我们的案例中,我们将在app目录中创建一个名为Presenters的新目录,并创建一个Page文件。展示器应该扩展抽象类Jackthedev\Presenter\Presenter。
<?php
namespace App\Presenters;
use Jackthedev\Presenter\Presenter;
class Page extends Presenter
{
...
}
4. 定义你的展示器方法
你的模型实例会自动传递到你的展示器类,并且可以通过$this->entity访问。有了这个,你现在可以定义任意数量的展示器方法。
<?php
namespace App\Presenters;
use Jackthedev\Presenter\Presenter;
class Page extends Presenter
{
public function title()
{
return ucwords($this->entity->title);
}
}
上面的用法将是{{ $page->present()->title }}。