serafim / gist
1.0.0
2014-07-17 10:25 UTC
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2020-08-08 22:02:35 UTC
README
Laravel 4 的模型 json 序列化过滤器
安装
- 添加 composer 需求
{ "require": { "serafim/gist": "dev-master" } }
- [可选] 在
app/config/app.php
文件中添加 Laravel 门面
'aliases' => [ /* another aliases... */ 'Gist' => 'Gist\Support\GistFacade' ]
使用方法
您可以在控制器中为模型或模型集合添加过滤器。
方法 make
可以接受以下值之一
- 模型实例
- 模型集合
- 外部过滤器类名和前面的某个断言作为第二个参数
- null(空模型查找结果)
包含的过滤器
示例
class UserController extends \BaseController { public function index() { return Gist::filter(User::all()) ->only('id', 'login'); ->set('created', function($model) { return [ 'rfc2822' => $model->created_at->toRFC2822String(), 'timestamp' => $model->created_at->timestamp ]; }) ->rename('login', 'name'); } }
返回
[{"id": "USER_ID", "name": "USER_LOGIN", "created": {"rfc2822": "CREATED_RFC2822_FORMAT", "timestamp": "CREATED_UNIX_TIMESTAMP"}]
方法
方法 only
表示我们应该返回模型中的这些属性。
->only((string)$property [, (string)$property])
方法 set
表示指定的属性应该返回一个函数结果。回调 $callback
接收一个参数 - ActiveRecord 模型实例。
->set((string)$property, (callable)$callback)
方法 rename
重命名指定的属性。
->rename((string)$source, (string)$target);
外部过滤器
您可以创建外部过滤器
class UserFilter { use Gist\Traits\FilterTrait; protected $properties = [ 'id', 'login' => 'name' ]; protected $set = [ 'created' => 'getTime' ]; public function getTime($model) { return [ 'rfc2822' => $model->created_at->toRFC2822String(), 'timestamp' => $model->created_at->timestamp ]; } public function produce($filter) { return $filter; } }
并使用它们
class UserController extends \BaseController { public function index() { return Gist::filter('UserFilter', User::all()); } }
功能列表
属性 $properties
表示模型(或集合)哪些字段需要返回。
protected $properties = [ /* ->only(PROPERTY_NAME) */ PROPERTY_NAME, /* ->only(PROPERTY_NAME)->rename(PROPERTY_NAME, PROPERTY_ALIAS) */ PROPERTY_NAME => PROPERTY_ALIAS ];
属性 $set
表示要添加到结果中的值,这将作为过滤方法的结果。
protected $set = [ PROPERTY_NAME => METHOD_NAME ]; public function METHOD_NAME((Model)$model) { }
方法 produce
会自动调用并接受一个参数 - 一个现有的模型过滤器。
public function produce($filter) { $filter->only(***); $filter->rename('some', 'any'); }