Zend Framework - 在重定向上将变量从一个控制器传递到另一个控制器

时间:2011-03-17 15:34:14

标签: php zend-framework

我在Zend Framework中有一个小表单,当它被发送并且有效时,我想将$ id传递给另一个控制器,我将在另一个视图中显示有关该id的一些信息。

表单和验证已完成,但我似乎无法弄清楚如何将$ id传递给另一个控制器。

我有以下代码:

if ($this->_request->isPost()) 
    {       
        $formData = $this->_request->getPost(); 
        if ($form->isValid($formData)) {
            die($id);
        } else {
            $form->populate($formData);
        }
    }

现在它在有效时显示id,但是我想将它重定向到使用$ id变量的formAction。

谢谢!

3 个答案:

答案 0 :(得分:2)

如果只有1个变量,您只需将其作为GET请求发送即可。所以

$this->_redirect('/controller/action/varname/varvalue')

会奏效。在控制器中,您可以使用

检索它
$myvar = $this->_getParam('varname', false);

您可以使用多个变量执行此操作,只需将名称/值对附加到URL即可。

另一方面,如果您有大量数据,那么您可能需要使用cURL POST它或使用Zend Session将其存储在控制器A中然后在控制器B中检索

答案 1 :(得分:1)

如果你不想做_forward我会建议你使用Zend_Session在会话中提出有问题的ID,或者根据应用程序的内部,使用{{ {1}}

如果您可以使用Zend_Registry::set('variablename', $id);,那么您应该可以从另一个控制器中的请求对象获取数据,就像在此处一样。

更新

转发,将您的呼叫转接到指定的控制器和操作。 转发到另一个控制器/操作。

有点像_forward。必须给出动作,但所有其他参数都是可选的。如果需要,$this->_forward('nameOfAction', 'nameOfController', 'module', paramsArray)可用于传递数据。

以下内容摘自有关paramsArray

的源文档
_forward

因此,如果您要转发控制器/** * Forward to another controller/action. * * It is important to supply the unformatted names, i.e. "article" * rather than "ArticleController". The dispatcher will do the * appropriate formatting when the request is received. * * If only an action name is provided, forwards to that action in this * controller. * * If an action and controller are specified, forwards to that action and * controller in this module. * * Specifying an action, controller, and module is the most specific way to * forward. * * A fourth argument, $params, will be used to set the request parameters. * If either the controller or module are unnecessary for forwarding, * simply pass null values for them before specifying the parameters. * * @param string $action * @param string $controller * @param string $module * @param array $params * @return void */ 中的操作foo,您可以

bar

并在$this->_forward('foo', 'bar');

BarController

答案 2 :(得分:0)

有多种方法可以做到这一点(主要是使用Zend_Session),但需要这种糟糕设计的气味。你究竟想用这个做什么?