如何在Form方法中访问Request对象? 我假设以某种方式可以访问控制器的请求对象 在Form方法中使用ActionHelper,但为其编写新类 这样的任务似乎过分了。
或者我应该以某种方式将控制器的请求保存到Zend_Registry并访问表单中的注册表项?
答案 0 :(得分:7)
$request = Zend_Controller_Front::getInstance()->getRequest()
答案 1 :(得分:1)
虽然注册表方法(1)以及访问单例前端控制器(2)都可以工作,但这两种方法都存在一些主要的缺点:它们在Zend_Controller_Front
或者Zend_Registry
上引入了一个硬依赖性Zend_Controller_Request_Abstract
和请求密钥以及// (1)
// in bootstrap e.g.
Zend_Registry::set('request', Zend_Controller_Front::getInstance()->getRequest());
// in form method
$request = Zend_Registry::get('request');
// (2)
//in form method
$request = Zend_Controller_Front::getInstance()->getRequest();
。
// form class (constructor-injection presumed)
class My_Form extends Zend_Form
{
/**
* @var Zend_Controller_Request_Abstract
*/
protected $_request;
public function __construct(Zend_Controller_Request_Abstract $request, $options = null)
{
parent:: __construct($options);
$this->_request = $request;
}
}
// or inject only parameters
class My_Form extends Zend_Form
{
/**
* @var array
*/
protected $_params;
public function __construct(array $params, $options = null)
{
parent:: __construct($options);
$this->_params= $params;
}
}
我认为最好的方法是通过表单的构造函数或通过表单上的setter将请求对象注入表单中,甚至更好地将请求参数作为数组注入。
{{1}}