我在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。
谢谢!
答案 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),但需要这种糟糕设计的气味。你究竟想用这个做什么?