我正在 CakePHP 2.4.2 中编写一些简单的重定向,并遇到了一个让我有点困惑的问题。
如何重定向到具有相同 passArgs 的另一个视图?看起来应该很简单,但我一定忽略了一些东西。我试过这个:
$this->redirect(array_merge(array('action' => 'index',$this->params['named'])));
调试输出似乎是正确的:
array(
'action' => 'index',
(int) 0 => array(
'this' => 'url',
'and' => 'stuff'
)
)
我想要的结果是
view/this:url/and:stuff
重定向至
index/this:url/and:stuff
但现在它只是让我去
index/
不确定我在这里缺少什么,也许我有更深层次的配置问题 - 尽管它不是一个非常复杂的应用程序。
对于传递的参数(数字键),请使用 array_merge。 但由于您使用命名参数,它具有基于字符串的键,因此您可以利用 PHP 基础知识:
$this->redirect(array('action' => 'index') + $this->request->params['named']));
这会添加命名参数中除操作之外的所有数组值,该操作已在此处使用(因此无论如何不应被覆盖)。所以优先级也很明确。
Cake 需要一个扁平的参数数组,因此您需要使用
array_merge
在其侧面添加额外的数组。试试这个:
$this->redirect(array_merge(array('action' => 'index'), $this->params['named']));
...或使用原始变量
$passedArgs
:
$this->redirect(array_merge(array('action' => 'index'), $this->passedArgs));
也许会使用
persist
中的Router::connect()
属性更好的解决方案?