daniiltserin/演示者

Laravel 的简单视图演示者库。

v1.0.3 2017-03-25 13:58 UTC

This package is not auto-updated.

Last update: 2024-09-20 20:36:37 UTC


README

视图演示者是一种非常实用的装饰对象绑定的方法。这允许你在合理的位置执行与视图相关的逻辑,而不是直接在视图中或更糟糕的是在你的模型中放置它。

还有其他几个 提供类似的功能。这个包仅仅是我的首选实现,因为所有配置都是独立于被装饰的对象。

安装

您可以使用 Composer 安装此包

$ composer require daniiltserin/presenter

或在您的 composer.json

{
    "require": {
        "daniiltserin/presenter": "*"
    }
}

运行 composer update 后,您需要在您的 config/app.php 文件中注册 服务提供者

'providers' => [
    Daniiltserin\Presenter\PresenterServiceProvider::class
]

使用

配置演示者

有几种配置演示者的方法。首先,您可以利用配置文件,可以使用以下命令发布

$ php artisan vendor:publish --provider="Daniiltserin\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);

创建演示者

演示者应该扩展自 Daniiltserin\Presenter\AbstractPresenter,然而,这并不是必须的,但强烈推荐,因为您将能够访问几个方法和魔法方法,它们提供了一些有用的功能。

我喜欢将我的演示者放在 Presenters 文件夹中,但是您可以根据自己的喜好组织。

namespace App\Presenters;

use Daniiltserin\Presenter\AbstractPresenter;

class UserPresenter extends AbstractPresenter
{

}

如果您想注入依赖项,唯一的要求是您必须命名一个参数 $object,以便 Laravel 可以正确注入绑定的对象,并且您需要调用父构造函数。

namespace App\Presenters;

use App\SomeNamespace\SomeClass;
use Daniiltserin\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

享受

这就是全部内容。