备忘: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官方文档代码 也吻合了。
日拱一卒
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!