lewis / presenter
用于 Laravel 的简单视图呈现库。
Requires
- php: >=5.5.9
- illuminate/support: 5.1.*|5.2.*
Requires (Dev)
- illuminate/pagination: 5.1.*|5.2.*
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: ~2.0
README
视图呈现器是装饰绑定到视图的对象的一种非常实用的方式。这允许您在合理的位置执行与视图相关的逻辑,而不是直接在视图中放置它,或者更糟的是,在模型中放置它。
还有 几个 其他 库 提供类似的功能。此包仅是我的首选实现,因为所有配置都是独立于被装饰的对象进行的。
安装
您可以使用 Composer 安装此包。
$ composer require lewis/presenter
或者在您的 composer.json
中
{ "require": { "lewis/presenter": "0.1.*" } }
一旦您运行了 composer update
,您需要在您的 config/app.php
文件中注册 服务提供者。
'providers' => [ Lewis\Presenter\PresenterServiceProvider::class ]
用法
配置呈现器
您可以通过几种方式配置您的呈现器。首先,您可以使用配置文件,可以使用以下命令发布
$ php artisan vendor:publish --provider="Lewis\Presenter\PresenterServiceProvider"
默认情况下没有配置任何呈现器。发布的文件仅包含有关如何配置您的呈现器的说明。您必须提供一个将对象与其呈现器链接起来的键/值对数组。
return [ App\User::class => App\Presenters\UserPresenter::class, App\Post::class => App\Presenters\PostPresenter::class ];
如果您愿意,可以直接在装饰器上设置一组呈现器数组。您可能选择从服务提供者这样做。
$this->app['decorator']->setBindings([ \App\User::class => \App\Presenters\UserPresenter::class, \App\Post::class => \App\Presenters\PostPresenter::class ]);
最后,您可以通过 register
方法逐个配置呈现器,再次从提供者内部进行。
$this->app['decorator']->register(\App\User::class, \App\Presenters\UserPresenter::class);
创建呈现器
呈现器应该从 Lewis\Presenter\AbstractPresenter
扩展,然而,这 不是 必要的,但强烈推荐,因为您将能够访问提供一些有用功能的方法和魔术方法。
我喜欢将我的呈现器保存在一个 Presenters
文件夹中,然而,您可以根据自己的喜好组织它们。
namespace App\Presenters; use Lewis\Presenter\AbstractPresenter; class UserPresenter extends AbstractPresenter { }
如果您希望注入依赖项,唯一的要求是您将参数命名为 $object
,这样 Laravel 可以正确地注入绑定对象,并且您需要调用父构造函数。
namespace App\Presenters; use App\SomeNamespace\SomeClass; use Lewis\Presenter\AbstractPresenter; class UserPresenter extends AbstractPresenter { protected $class; public function __construct($object, SomeClass $class) { $this->class = $class; parent::__construct($object); } }
然后您的呈现器可以定义用于在视图中使用的方法的逻辑。
public function prettySlug() { return '/'.ltrim($this->slug, '/'); }
您可以直接引用包装对象的属性(如上所示),或使用 $object
属性。
public function prettySlug() { return '/'.ltrim($this->object->slug, '/'); }
在视图内部
现在您已经配置了您的呈现器并创建了它们,您只需要在视图内部使用它们。按照您定义的方法或属性调用即可。
{{ $post->prettySlug }} Or: {{ $post->prettySlug() }}
您仍然可以访问您的关系和其他模型属性。
{{ $post->title }} @foreach($post->comments as $comment) ... @endforeach
享受
这就是全部的内容。