备忘:Dingo 是如何使用 Fractal来转换的?

  • 在\App\Http\Controllers\Api\UsersController::me中,如下代码与fractal官方文档代码是不同的,完全看不出有用到Fractal。
    return $this->response->item($this->user(), new UserTransformer());
  • 原因是:Fractal is the default transformation layer used by the Dingo package
  • 查看配置文件可以看出
    • config/api.php
      'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class),
  • 注册serviceProvider也可以看出
    • \Dingo\Api\Provider\DingoServiceProvider::registerTransformer
      //Register the transformer factory.
      protected function registerTransformer()
      {
          $this->app->singleton('api.transformer', function ($app) {
              return new TransformerFactory($app, $this->config('transformer'));
          });
      }
  • 而 new TransformerFactory 就设置了 adapter
    //Create a new transformer factory instance.
    public function __construct(Container $container, Adapter $adapter)
    {
        $this->container = $container;
        $this->adapter = $adapter;
    }
  • 这个adapter会在下面用到,trace如下:
    Dingo\Api\Transformer\Adapter\Fractal->createResource()
    Dingo\Api\Transformer\Adapter\Fractal->transform()
    Dingo\Api\Transformer\Factory->transform()
    Dingo\Api\Http\Response->morph()
  • 在\Dingo\Api\Transformer\Adapter\Fractal::createResource可以看到 new FractalItem($response, $transformer, $key),这个就和 fractal官方文档代码 吻合了。

    //Create a Fractal resource instance.
    protected function createResource($response, $transformer, array $parameters)
    {
        $key = isset($parameters['key']) ? $parameters['key'] : null;
    
        if ($response instanceof IlluminatePaginator || $response instanceof IlluminateCollection) {
            return new FractalCollection($response, $transformer, $key);
        }
    
        return new FractalItem($response, $transformer, $key);
    }
  • 在\Dingo\Api\Transformer\Adapter\Fractal::transform可以看到$this->fractal->createData($resource, $identifier)->toArray(),与fractal官方文档代码 也吻合了。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会