我在Foo Controller 中有一个 Action 方法,它需要参数:
public function fooAction($one, $two) {
$a = one;
$b = $two;
}
我需要从一些Boo控制器的其他方法转发到该方法。其中一个参数必须是引用参数。该手册的唯一示例是:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
没有任何附加参数。但他们写道:
$params 是一个可选参数数组,用于查看 RouteMatch 对象以用于此特定请求。
所以,我尝试了:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'one' => &$one,
'two' => $two,
));
但它不起作用。
有没有办法将额外的参数传递给转发控制器?
升级版:
这些也不起作用:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'params' => array(
'one' => &$one,
'two' => $two,
)));
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'options' => array(
'one' => &$one,
'two' => $two,
)));
更新 2:
我仍然无法获得我想要的功能(通过forward
插件传递参数),但我找到了其他解决方案。在调用forward
插件之前,我将变量设置为Request
对象,然后从我的Boo\Controller\BooController的boo Action 中forward
获取它们:Request
// in Foo::fooAction
$this->getRequest()->one = &$one;
$this->getRequest()->two = $two;
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
// in Boo::booAction
$a = $this->getRequest()->one;
$b = $this->getRequest()->two;
愚蠢的解决方案,它不适用于 Ajax 请求。仍然对如何使用 forward 插件传递参数感兴趣。或者也许如何让他们进入booAction。因为Request
如果我将它们与forward
.
UPD 3 和最终版本:
我终于找到了他们决定隐藏我通过forward
插件传递的参数的地方。他们将它们放入RouteMatch
对象中。
- 试着猜猜我们把你的参数藏在哪里了……哦,是的RouteMatch
,它们在里面,当然它们在那里,你不觉得吗?
forward
并且在手册的插件部分没有任何信息!
要获得参数,我必须在我的BooController::booAction
:
$param = $this->getEvent()->getRouteMatch()->getParam('nameOfParam');