我正在构建一个返回JSON响应的RESTful API。在控制器中设置视图变量时,有没有办法显式设置已经存在的数组变量的元素?
例如,假设AppController
设置了一个视图var,它是一个数组:
$this->set('myArray', array('foo' => 'bar'));
然后在子控制器MyController
中我要添加到该数组。类似的东西:
$this->set('myArray.add', 'New Element');
以便视图的JSON响应为:
{
"myArray": {
"foo": "bar",
"add": "New Element"
}
}
我猜测它可以通过将数组存储为AppController
类的普通PHP属性,然后在最终执行{{1}之前添加到子控制器中的数组 - 以环形方式完成一旦在控制器动作结束时。
但我很好奇是否有办法通过$this->set()
方法单独执行此操作。
答案 0 :(得分:2)
但我很好奇是否有办法通过Controller :: set()方法单独执行此操作。
没有。在这种情况下,阅读代码总是一个好主意。这本来可以回答你的问题。
请参阅http://api.cakephp.org/3.2/source-class-Cake.View.ViewVarsTrait.html#129
实现类似setMerge()的方法,它可以执行您想要的操作,或者直接将array_merge()数据放入控制器的viewVars属性中。