jeffersonsimaogoncalves/cakephp-fractal-transformer-view

利用 Fractal 库进行实体转换的 CakePHP 视图构建器

2.0.0 2020-11-09 13:16 UTC

This package is auto-updated.

Last update: 2024-09-15 03:08:43 UTC


README

此插件是对 JsonView 的一种轻量级封装,允许使用 Fractal 转换器 来生成您的 API 输出。什么是 Fractal

Fractal 提供了一种用于复杂数据输出的表现和转换层,如 RESTful API 中所见,并且与 JSON 配合得非常好。这可以被视为您的 JSON/YAML 等 JSON 视图层。当构建 API 时,人们通常只是从数据库中抓取一些东西,然后传递给 json_encode()。这可能对“简单”API来说可以接受,但如果它们被公众使用或被移动应用程序使用,这很快就会导致输出不一致。

要求

  • CakePHP 3.6+

安装

您可以使用 Composer 将此插件安装到您的 CakePHP 应用程序中。

composer require jeffersonsimaogoncalves/cakephp-fractal-transformer-view

用法

要启用此插件,请将 FractalTransformerView.FractalTransformer 类名设置为 viewBuilder。然后,您只需像在您的 数据视图 中一样操作即可 - 通过设置 _serialize 变量来指定您想要序列化的视图变量。例如:

namespace App\Controller;

class ArticlesController extends AppController
{
    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('RequestHandler');
        
        $this->viewBuilder()->className('FractalTransformerView.FractalTransformer');
    }

    public function index()
    {
        // Set the view vars that have to be serialized.
        $this->set('articles', $this->paginate());
        // Specify which view vars JsonView should serialize.
        $this->set('_serialize', ['articles']);
    }
}

视图将查找以实体名称开头的转换器类。例如:

namespace App\Model\Transformer;

use App\Model\Entity\Article;
use League\Fractal\TransformerAbstract;

class ArticleTransformer extends TransformerAbstract
{
    /**
     * Creates a response item for each instance
     *
     * @param Article $article post entity
     * @return array transformed post
     */
    public function transform(Article $article)
    {
        return [
            'title' => $article->get('title')
        ];
    }
}

如果找不到转换器类,变量将按常规方式序列化。

可以通过定义 _transformer 视图变量来设置自定义转换器类名

$this->set('_transform', ['articles' => '\App\Model\Transformer\CustomArticleTransformer']);

您也可以定义不希望为某些变量使用转换器的条件

$this->set('_transform', ['articles' => false]);

错误 & 反馈

https://github.com/jeffersonsimaogoncalves/cakephp-fractal-transformer-view/issues

致谢

此作品基于 Andrej Griniuk 的代码 https://github.com/andrej-griniuk/cakephp-fractal-transformer-view