jeffersonsimaogoncalves / cakephp-fractal-transformer-view
利用 Fractal 库进行实体转换的 CakePHP 视图构建器
2.0.0
2020-11-09 13:16 UTC
Requires
- php: ^7.2
- cakephp/cakephp: ^4.0
- league/fractal: >=0.13.0
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。