ramiawadallah / presenter
为Laravel提供的简单视图演示库。
Requires
- php: ^7.2|^8.0|^8.1
- laravel/framework: ^5.6|^6.0|^7.0|^8.0|^9.0|^9.11|9.14.*|^10.0
Requires (Dev)
- illuminate/pagination: ^10.0
- mockery/mockery: ^1.0
- phing/phing: dev-master
- phpspec/phpspec: ^2.0
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.0
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
享受
这就是全部内容。