备忘: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官方文档代码 也吻合了。
日拱一卒
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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