serafim/gist

此包已被弃用且不再维护。作者建议使用 illuminate/collections 包。

Laravel 4 的模型 json 序列化过滤器

1.0.0 2014-07-17 10:25 UTC

This package is auto-updated.

Last update: 2020-08-08 22:02:35 UTC


README

Laravel 4 的模型 json 序列化过滤器

安装

  1. 添加 composer 需求
{
    "require": {
        "serafim/gist": "dev-master"
    }
}
  1. [可选] 在 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');
}