ramiawadallah/presenter

为Laravel提供的简单视图演示库。

dev-master 2023-10-03 10:41 UTC

This package is auto-updated.

Last update: 2024-09-03 15:16:24 UTC


README

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

目前有几个 其他 提供类似功能。这个包只是我偏好的实现,因为所有配置都是独立于被装饰的对象的。

安装

您可以使用Composer安装此包

$ composer require ramiawadallah/presenter

或者在您的 composer.json

{
    "require": {
        "ramiawadallah/presenter": "0.1.*"
    }
}

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

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

用法

配置演示器

您有多种方式可以配置演示器。首先,您可以使用配置文件,可以使用以下命令进行发布

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

创建演示器

演示器应该扩展自 Ramiawadallah\Presenter\AbstractPresenter,然而,这不是必需的,但强烈推荐,因为您将能够访问提供一些有用功能的方法和魔术方法。

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

namespace App\Presenters;

use Ramiawadallah\Presenter\AbstractPresenter;

class UserPresenter extends AbstractPresenter
{

}

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

namespace App\Presenters;

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

享受

这就是全部内容。