jackthedev/presenter

Laravel 5 视图展示器

3.0.4 2020-10-03 10:25 UTC

This package is not auto-updated.

Last update: 2024-09-19 20:04:59 UTC


README

Laravel 5.1 Laravel 5.2 Source License

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 }}