andrej-griniuk / cakephp-fractal-transformer-view
利用Fractal库进行实体转换的CakePHP视图构建器
Requires
- php: >=8.1
- cakephp/cakephp: ^5.0
- league/fractal: ^0.20.1
Requires (Dev)
- cakephp/bake: ^3.0
- phpunit/phpunit: ^10
Suggests
- cakephp/bake: Required to generate transformers.
README
FractalTransformerView插件用于CakePHP
此插件是对JsonView
的一个薄包装,允许使用Fractal转换器来处理您的API输出。什么是Fractal?
Fractal为复杂的数据输出提供了表示和转换层,如RESTful API中的输出,与JSON配合得非常好。将其视为JSON/YAML等数据的视图层。在构建API时,人们通常会直接从数据库中抓取数据并传递给json_encode()。这可能在“简单”API中可行,但如果它们被公众使用或被移动应用程序使用,这会导致输出不一致。
要求
- CakePHP 5.x(使用~1.0用于CakePHP 3.x,~2.0用于CakePHP 4.x)
安装
您可以使用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());
制作转换器
要制作转换器,您必须在您的src/Application.php文件中包含此插件。在您的引导方法中添加以下内容:
$this->addPlugin('FractalTransformerView');
您还必须安装cakephp/bake Composer包。
现在,您可以通过运行bin/cake bake transformer YOUR_MODEL
来创建转换器。
错误与反馈
https://github.com/andrej-griniuk/cakephp-fractal-transformer-view/issues
致谢
受@josegonzalez 使用Fractal对实体进行转换以创建自定义API端点的启发。
许可协议
版权所有 (c) 2016, Andrej Griniuk,并许可于MIT许可协议。