lewis/presenter

用于 Laravel 的简单视图呈现库。

v1.0.1 2016-02-19 05:23 UTC

This package is auto-updated.

Last update: 2024-08-24 13:56:34 UTC


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

享受

这就是全部的内容。