备忘: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),
 
- config/api.php
- 注册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')); }); }
 
- \Dingo\Api\Provider\DingoServiceProvider::registerTransformer
- 而 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官方文档代码 也吻合了。
 
           
         
             
             
             
                     
                     
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: