关于 Transformer 的全局配置?
教程做到这里除了 passport 章节算是全部结束了,全程做下来有一点疑问,就是关于 Transformer 的。
在控制器响应请求一般使用
return $this->response->item($object, Transformer)->setStatusCode($code);
or
return $this->response->collection($objec, new Transformer)->setStatusCode($code);
这里第二个参数,也就是 Transformer 实例是必传的,但是在 Dingo\Api\Transformer\Factory 中又可以使用如下代码进行绑定:
/**
* Register a transformer binding resolver for a class.
*
* @param $class
* @param $resolver
* @param array $parameters
* @param \Closure|null $after
*
* @return \Dingo\Api\Transformer\Binding
*/
public function register($class, $resolver, array $parameters = [], Closure $after = null)
{
return $this->bindings[$class] = $this->createBinding($resolver, $parameters, $after);
}
我们的定义了 Transformer 之后在所有的返回中都会应用,其实完全可以省略这第二个参数的,但偏偏不行。
还有如下一些方法,如果不进行全局的绑定,确用不上Transformer 。
$this->response->created()
$this->response->accepted()
没去看源码,不知道是不是有两全的方法。
关于 LearnKu
$this->response->item($object, Transformer)->setStatusCode(201); 我只是用来替代 created 而已,因为dingo 的created 不能传格式化的数据。
那么绑定不一定是你理解的绑定,两全的方法,就是懒得写第二个参数呗,可能自己封装一个方法吧
@liyu001989 其实我也并不是遇到了什么实质性的问题,只是每次都需要传递参数让我浑身难受。然后我就去翻了一下代码,发现可以进行转换层和资源的绑定,然后我尝试了一下,是可以实现数据转换的,这就更难受了。然后就怀疑自己是不是错过了什么小技巧 :joy: