mccool/laravel-auto-presenter
最新稳定版本:7.7.0
Composer 安装命令:
composer require mccool/laravel-auto-presenter
包简介
A system for auto-decorating models with presenter objects.
关键字:
README 文档
README
This package automatically decorates objects bound to views during the view render process.
Features
- Automatically decorate objects bound to views
- Automatically decorate objects within paginator instances
- Automatically decorate objects within arrays and collections
Installing
Laravel Auto Presenter requires PHP 7.1-8.1 and supports Laravel 5.5-9. If you need support for older Laravel or PHP versions, please choose an older version of Laravel Auto Presenter.
| Auto Presenter | L5.1 | L5.2 | L5.3 | L5.4 | L5.5 | L5.6 | L5.7 | L5.8 | L6 | L7 | L8 | L9 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4.3 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 5.0 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 6.2 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 7.7 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
To get the latest version, simply require the project using Composer:
$ composer require mccool/laravel-auto-presenter
Once installed, if you are not using automatic package discovery, then you need to register the McCool\LaravelAutoPresenter\AutoPresenterServiceProvider service provider in your config/app.php.
You can also optionally alias our facade:
'AutoPresenter' => McCool\LaravelAutoPresenter\Facades\AutoPresenter::class,
Upgrading
Version 6 to 7
In Laravel Auto Presenter 7, note that:
- Laravel 5.5-8 are supported now. Use V6 if you need L5.1-5.4.
- Our new minimum PHP version requirement is 7.1.3, up from 7.0.0.
Version 5 to 6
Going from Laravel Auto Presenter 5, to 6, note that:
- We have a new
Decoratableinterface to determine if relations can be decorated. While this is not a BC break, sinceHasPresenterextends it, it is definitely worth noting. - v6 supports Laravel 5.5 now, without dropping support for 5.1+.
- Our new minimum PHP version requirement is 7.0.0, up from 5.5.9.
Version 4 to 5
If you're upgrading from Laravel Auto Presenter 4, to 5, note that:
- The
BasePresenterno longer has a constructor, so you cannot callparent::__construct($resource). - The model is now injected using the
setWrappedObjectmethod, inherited from theBasePresenter. - V5 now supports Laravel 5.4 as well as 5.1, 5.2, and 5.3.
Usage
To show how it's used, we'll pretend that we have an Eloquent Post model. It doesn't have to be Eloquent, it could be any kind of class. But, this is a normal situation. The Post model represents a blog post.
I'm using really basic code examples here, so just focus on how the auto-presenter is used and ignore the rest.
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'); } }
Also, we'll need a controller..
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')); } }
and a view...
@foreach($posts as $post)
<li>{{ $post->title }} - {{ $post->published_at }}</li>
@endforeach
In this example the published_at attribute is likely to be in the format: "Y-m-d H:i:s" or "2013-08-10 10:20:13". In the real world this is not what we want in our view. So, let's make a presenter that lets us change how the data from the Post class is rendered within the view.
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(); } }
Note that the model is injected by calling the setWrappedObject method, inherited from BasePresenter.
We need the post class to implement the interface.
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; } }
Now, with no additional changes our view will show the date in the desired format.
The Decoratable interface is used to allow the model's relations to be decorated, and the HasPresenter interface (which extends that one) is used to have the model itself decorated.
Troubleshooting
If an object isn't being decorated correctly in the view then there's a good chance that it's simply not in existence when the view begins to render. For example, lazily-loaded relationships won't be decorated. You can fix this by eager-loading them instead. Auth::user() will never be decorated. I prefer to bind $currentUser to my views, anyway.
If an object is a relation of another object and it isn't being decorated in the view, you might not have added the Decoratable interface to the other object. To fix this, add the Decoratable interface to the other object.
Security
If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. You may view our full security policy here.
License
Laravel Auto Presenter is licensed under The MIT License (MIT).
For Enterprise
Available as part of the Tidelift Subscription
The maintainers of mccool/laravel-auto-presenter and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.
mccool/laravel-auto-presenter 适用场景与选型建议
mccool/laravel-auto-presenter 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.06M 次下载、GitHub Stars 达 748, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「presenter」 「eloquent」 「lpm」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 mccool/laravel-auto-presenter 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mccool/laravel-auto-presenter 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 mccool/laravel-auto-presenter 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Shoot aims to make providing data to your templates more manageable
A nestable user interface building module for the Rhubarb PHP framework based upon the model-view-presenter pattern.
Implementation for Laravel of the presenter design pattern.
Presentation and Formatting helper with nice fluent interface.
A Laravel Eloquent model trait for translatable resource
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
统计信息
- 总下载量: 1.06M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 758
- 点击次数: 22
- 依赖项目数: 13
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 未知
