mccool / laravel-auto-presenter
一个用于自动装饰模型为展示对象的系统。
Requires
- php: ^7.1.3 || ^8.0
- illuminate/container: ^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/contracts: ^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0
- illuminate/events: ^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0
- illuminate/pagination: ^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0
- illuminate/support: ^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0
- illuminate/view: ^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0
Requires (Dev)
- graham-campbell/analyzer: ^2.4 || ^3.0
- graham-campbell/testbench: ^5.4
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7
- dev-master / 7.7.x-dev
- 7.7.0
- 7.6.0
- 7.5.0
- 7.4.1
- 7.4.0
- 7.3.1
- 7.3.0
- 7.2.1
- 7.2.0
- 7.1.0
- 7.0.1
- 7.0.0
- 6.2.x-dev
- 6.2.1
- 6.2.0
- 6.1.0
- 6.0.0
- 5.0.x-dev
- 5.0.0
- 4.3.x-dev
- 4.3.0
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0.0
- 3.1.x-dev
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 3.0.0-beta8
- 3.0.0-beta7
- 3.0.0-beta6
- 3.0.0-beta5
- 3.0.0-beta4
- 3.0.0-beta3
- 2.2.x-dev
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.0
- 1.2.x-dev
- 1.2.0
- 1.1.0
- 1.0.0
This package is auto-updated.
Last update: 2024-09-09 15:08:50 UTC
README
此包在视图渲染过程中自动装饰绑定到视图的对象。
特性
- 自动装饰绑定到视图的对象
- 自动装饰分页实例内的对象
- 自动装饰数组和集合内的对象
安装
Laravel Auto Presenter 需要 PHP 7.1-8.1,并支持 Laravel 5.5-9。如果您需要支持旧版 Laravel 或 PHP 版本,请选择 Laravel Auto Presenter 的旧版本。
要获取最新版本,只需使用 Composer 引入项目。
$ composer require mccool/laravel-auto-presenter
安装完成后,如果您未使用自动包发现,则需要将 McCool\LaravelAutoPresenter\AutoPresenterServiceProvider
服务提供者注册到您的 config/app.php
文件中。
您还可以选择性地别名我们的外观
'AutoPresenter' => McCool\LaravelAutoPresenter\Facades\AutoPresenter::class,
升级
版本 6 到 7
在 Laravel Auto Presenter 7 中,请注意
- Laravel 5.5-8 现在受到支持。如果您需要 L5.1-5.4 的支持,请使用 V6。
- 我们的新最低 PHP 版本要求是 7.1.3,高于 7.0.0。
版本 5 到 6
从 Laravel Auto Presenter 5 升级到 6,请注意
- 我们有一个新的
Decoratable
接口,用于确定关系是否可以被装饰。虽然这不是一个 BC 兼容性问题,因为HasPresenter
扩展了它,但这绝对值得注意。 - v6 现在支持 Laravel 5.5,同时仍然支持 5.1+。
- 我们的新最低 PHP 版本要求是 7.0.0,高于 5.5.9。
版本 4 到 5
如果您是从 Laravel Auto Presenter 4 升级到 5,请注意
BasePresenter
现在不再有构造函数,因此您不能调用parent::__construct($resource)
。- 现在通过继承自
BasePresenter
的setWrappedObject
方法注入模型。 - V5 现在也支持 Laravel 5.4,以及 5.1、5.2 和 5.3。
用法
为了说明其用法,我们将假设我们有一个 Eloquent Post 模型。它不一定是 Eloquent,它可以是任何类型的类。但,这是一个正常的情况。Post 模型表示一篇博客文章。
这里使用的代码示例非常基础,所以请专注于自动展示器的使用,忽略其他内容。
use Example\Accounts\User; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $table = 'posts'; protected $fillable = ['author_id', 'title', 'content', 'published_at']; public function author() { return $this->belongsTo(User::class, 'author_id'); } }
此外,我们还需要一个控制器...
use Example\Accounts\Post; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\View; class PostsController extends Controller { public function getIndex() { $posts = Post::all(); return View::make('posts.index', compact('posts')); } }
以及一个视图...
@foreach($posts as $post) <li>{{ $post->title }} - {{ $post->published_at }}</li> @endforeach
在这个例子中,published_at 属性可能格式为:"Y-m-d H:i:s" 或 "2013-08-10 10:20:13"。在现实世界中,我们不想在视图中看到这样的格式。所以,让我们创建一个展示器,让我们能够改变 Post 类的数据在视图中的渲染方式。
use Carbon\Carbon; use Example\Accounts\Post; use McCool\LaravelAutoPresenter\BasePresenter; class PostPresenter extends BasePresenter { public function published_at() { $published = $this->wrappedObject->published_at; return Carbon::createFromFormat('Y-m-d H:i:s', $published) ->toFormattedDateString(); } }
请注意,模型是通过调用从 BasePresenter
继承的 setWrappedObject
方法注入的。
我们需要 post 类实现该接口。
use Example\Accounts\User; use Example\Blog\PostPresenter; use McCool\LaravelAutoPresenter\HasPresenter; use Illuminate\Database\Eloquent\Model; class Post extends Model implements HasPresenter { protected $table = 'posts'; protected $fillable = ['author_id', 'title', 'content', 'published_at']; public function author() { return $this->belongsTo(User::class, 'author_id'); } public function getPresenterClass() { return PostPresenter::class; } }
现在,没有任何额外的更改,我们的视图将按所需格式显示日期。
Decoratable
接口用于允许模型的关系被装饰,而 HasPresenter
接口(它扩展了该接口)用于使模型本身被装饰。
故障排除
如果在视图中没有正确装饰对象,那么很可能这个对象在视图开始渲染时根本不存在。例如,懒加载的关系不会被装饰。您可以通过预先加载来修复这个问题。Auth::user()永远不会被装饰。无论如何,我更喜欢将$currentUser绑定到我的视图中。
如果一个对象是另一个对象的关联对象,并且在视图中没有被装饰,那么您可能没有将Decoratable
接口添加到另一个对象中。为了解决这个问题,将Decoratable
接口添加到另一个对象中。
安全
如果您在这个包中发现了安全漏洞,请发送电子邮件到[email protected]。所有安全漏洞都将得到及时处理。您可以在这里查看我们的完整安全策略这里。
许可证
Laravel Auto Presenter遵循MIT许可证(MIT)。
企业版
作为Tidelift订阅的一部分提供
mccool/laravel-auto-presenter
的维护者以及成千上万的其他包维护者正在与Tidelift合作,为构建应用程序时使用的开源依赖项提供商业支持和维护。节省时间,降低风险,并提高代码质量,同时支付您实际使用的依赖项的维护者。了解更多信息请点击这里。