怎么在控制器里为 transformer 添加新的返回属性?

怎么在控制器里为transformer添加新的返回属性?
transformer定义好了返回格式,但是控制器里有个逻辑返回一个新的属性,怎么添加接口返回值里呢?
有什么办法,或者其他的什么方式吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
liyu001989
最佳答案
$transformer = new FooTransformer(['bar'=>'这里传值'])->setBar('或者这样传值');
return $this->response->item($foo, $transformer);

实现一下 setBar 方法就行,FooTransformer 里面根据传值, 记录到 $bar 属性里面,transformer 里面判断一下。

你能理解我的意思不?

5年前 评论
讨论数量: 10
liyu001989

资源尽量确定属性不要变,便于客户端封装。你能描述一下真实的场景吗

5年前 评论

@liyu001989
比如有个详情页,有个解锁的功能,我要验证当前登录是否解锁,未登录用户正常显示,固定返回未解锁。
之前用transformer 已经分装好了返回格式,我在控制器里判断了当前用户的解锁状态,想同步返回

5年前 评论
liyu001989

你的意思就是控制器里面,想传个值给 transformer,让他判断某个字段返回 true 或者 false 对吧。

transformer 也是个类啊,类就可以正常的传参啊,__construct 或者 setXXX() 把这个数据传个 transformer 就行了

5年前 评论

@liyu001989 我是个新手,有没有代码片段啥的,让我参考下呗~

5年前 评论
liyu001989
$transformer = new FooTransformer(['bar'=>'这里传值'])->setBar('或者这样传值');
return $this->response->item($foo, $transformer);

实现一下 setBar 方法就行,FooTransformer 里面根据传值, 记录到 $bar 属性里面,transformer 里面判断一下。

你能理解我的意思不?

5年前 评论

@liyu001989 没太用明白
$transformer = new FooTransformer(['is_buy'=>$isBuy]); return $this->response->item($foo, $transformer);
我直接这样传的,没报错,也没返回来~

5年前 评论
liyu001989

FooTransformer

class FooTransformer
{
     protected $isBuy = false;

     public function __construct($isBuy = false) {
          $this->isBuy = $isBuy;
     }

    public function transformer($foo) {
         return [
               'is_buy' => $this->isBuy ? '买了' : '没买',
         ]
    }
} 

这样你能理解吗

5年前 评论

@liyu001989 明白,但是是否购买的逻辑 是在控制器里判断的,控制器里如何写?

5年前 评论
liyu001989
$transformer = new FooTransformer(true); return $this->response->item($foo, $transformer);

是我没理解你的问题吗?你问的就是如何把参数传给一个类吗?

5年前 评论

@liyu001989 对对对,我明白了,太感谢了~

5年前 评论

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