关于 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()

没去看源码,不知道是不是有两全的方法。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
liyu001989

$this->response->item($object, Transformer)->setStatusCode(201); 我只是用来替代 created 而已,因为dingo 的created 不能传格式化的数据。

那么绑定不一定是你理解的绑定,两全的方法,就是懒得写第二个参数呗,可能自己封装一个方法吧

4年前 评论

@liyu001989 其实我也并不是遇到了什么实质性的问题,只是每次都需要传递参数让我浑身难受。然后我就去翻了一下代码,发现可以进行转换层和资源的绑定,然后我尝试了一下,是可以实现数据转换的,这就更难受了。然后就怀疑自己是不是错过了什么小技巧 :joy:

4年前 评论

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