czepter / cakephp-fractal-transformer-view
使用Fractal库进行实体转换的CakePHP视图构建器
2.2.1
2022-09-08 21:03 UTC
Requires
- php: >=7.2
- cakephp/cakephp: ^4.2
- league/fractal: ^0.20.1
Requires (Dev)
- cakephp/migrations: ^3.5
- phpunit/phpunit: ^9.5
README
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许可证下。