【问题标题】:How to add parameters to controller redirect?如何将参数添加到控制器重定向?
【发布时间】:2012-12-30 19:33:01
【问题描述】:

在 Zend Framework 2 中,我想在同一个控制器中将一组参数从一个动作传递到另一个动作,就像我在 ZF1 中以下列方式所做的那样:

$this->_helper->redirector->gotoSimple('foo', null, null, $params);

在 fooAction 中:

$params = $this->_request->getParams();

在 ZF2 中,尝试了我在这里看到的各种答案,我想出了以下内容:

$this->redirect()->toRoute('home/default', array(
            'controller' => 'client',
            'action' => 'foo',
            'param' => 'bar'),
        array('param' => 'bar'));

(尝试 toRoute() 的 $params 和 $options 参数)

在 fooAction 中:

$param = $this->getEvent()->getRouteMatch()->getParams();

$param = $this->params()->fromRoute());

没有一个适合我。有没有一种简单的方法来实现我想要的(通过重定向传递参数)或者我应该走使用容器、会话甚至全局变量的路线?

【问题讨论】:

  • 这应该可以很好地工作,您确定您的路线设置正确吗?您是否确保您的控制器实现 InjectApplicationEvent(或扩展提供的 ZF2 Abstract 控制器)
  • 不,我的路由中没有设置参数。如果我这样做,它确实有效。但这意味着我必须使用参数为每个单独的操作设置路线。 ZF1 的美妙之处在于,您可以使用 one for all(段)路由并在控制器中设置单独的参数。
  • 但是您使用的是 toRoute(),显然这需要使用路由;)
  • 如果您想将参数作为查询字符串传递,这是您的答案stackoverflow.com/a/15422349/1154069。要在控制器中访问,请使用 $this->params()->fromQuery('paramName');
  • @Andrew:是的,这是真正的问题,请参阅下面的答案。

标签: redirect parameters controller action zend-framework2


【解决方案1】:

你可以使用转发插件:

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-forward-plugin

public function someAction()
{
    $returnValue = $this->forward()->dispatch('application/controller/index', array(
        'action' => 'other'
    ));

    return $returnValue;
}

public function otherAction()
{
    return 99;
}

你也可以传递参数

【讨论】:

  • 但据我所见,为了使其工作,我需要在路由中设置参数。这在 ZF1 中是不必要的。
【解决方案2】:

最后,我所做的不是使用路由参数,而是使用查询参数,因为我使用的参数与路由无关。这样就解决了问题。

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多