我在富控制器的操作方法,该方法需要参数:ZF2:如何将参数传递给转发插件,然后我可以将其转发给我的方法?
public function fooAction($one, $two) {
$a = one;
$b = $two;
}
,我需要一些嘘控制器的其他方法转发给该方法。其中一个参数必须通过参考参数。 the manual具有的唯一示例是:
$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,
));
但它不工作。
有什么办法可以将其他参数传递给转发控制器吗?
UPD:
这些没有工作过:
$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,
)));
UPD 2:
我仍然不能得到我想要的功能(通过与参数forward
插件),但我发现其他解决方案。调用forward
插件之前,我将变量设置为Request
对象和forward
后,我在我的嘘声我嘘\控制器\ BooController的行动让他们从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
的对象中。
- Tryyyy猜猜我们隐藏你的参数在哪里......哦,是的,他们在RouteMatch
,当然他们在那里,你不觉得别的吗?
并没有在手册的forward
插件部分的任何信息!
要获取参数,可以我必须做这在我BooController::booAction
:
$param = $this->getEvent()->getRouteMatch()->getParam('nameOfParam');
是'Boo'有效的Controller-Alias?正如文档所指出的,Boo'需要是一个完全合格的ClassName(例如'Mymodule \ Controller \ BooController'),或者它应该是你在配置中定义的这个控制器的别名。 – Sam
是的,它是一个完全合格的ClassName ,它是我的Boo \ Controller \ Boo''。我在这个问题中这样写道,以缩短它。现在改变以避免模糊。 – Green
这仍然只是一个别名。假设你已经从'Boo \ Controller \ Boo' =>'Boo \ Controller \ BooController'设置了一个invokeable别名是安全的?除此之外,你的第一种方法是正确的。你如何测试参数是否存在?它们是否也在路由配置中定义? Tihs blogpost使用您正在寻找的功能:http://www.michaelgallego.fr/blog/2012/10/06/how-to-replace-the-action-helper-in-zf-2-and -make伟大,部件化的内容/ – Sam