czepter/cakephp-fractal-transformer-view

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

安装: 2

依赖: 0

建议: 0

安全: 0

星星: 0

关注者: 0

分支: 8

类型:cakephp-plugin

2.2.1 2022-09-08 21:03 UTC

This package is auto-updated.

Last update: 2024-09-09 01:05:54 UTC


README

Build Status Coverage Status License

FractalTransformerView插件用于CakePHP

此插件是JsonView的轻量级包装,允许使用Fractal转换器来处理API输出。什么是Fractal

Fractal为复杂的数据输出提供了表示和转换层,如RESTful API中常见的数据,与JSON配合得非常好。将其视为JSON/YAML等的视图层。在构建API时,人们通常会直接从数据库中获取数据并传递给json_encode()。这可能对“简单”的API是可行的,但如果它们被公众使用或被移动应用使用,则这会导致输出不一致。

要求

  • CakePHP 4.0+(对CakePHP 3.1+使用~1.0)

安装

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

composer require andrej-griniuk/cakephp-fractal-transformer-view

用法

要启用插件,请将FractalTransformerView.FractalTransformer类名设置为viewBuilder。然后您只需像通常在您的数据视图中做的那样即可 - 通过设置serialize视图构建器选项来指定要序列化的视图变量。例如:

namespace App\Controller;

class ArticlesController extends AppController
{
    public function initialize(): void
    {
        parent::initialize();
        
        $this->loadComponent('RequestHandler');
        
        $this->viewBuilder()->setClassName('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->viewBuilder()->setOption('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->viewBuilder()->setOption('transform', ['articles' => '\App\Model\Transformer\CustomArticleTransformer']);

您还可以定义不希望为某些变量使用转换器

$this->viewBuilder()->setOption('transform', ['articles' => false]);

您可以通过serializer视图构建器选项设置自定义序列化器(类名或对象)

$this->viewBuilder()->setOption('serializer', new CustomSerializer());

错误 & 反馈

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

致谢

灵感来自 @josegonzalez 使用Fractal转换实体以创建自定义API端点

许可证

版权所有(c)2016,Andrej Griniuk,并许可在MIT许可证下。