0

如何在 Form 方法中访问 Request 对象?我认为在 Form 方法中使用 ActionHelper 访问控制器的请求对象是可能的,但是为这样的任务编写一个新类似乎是多余的。

或者我应该以某种方式将控制器的请求保存到 Zend_Registry 并访问表单中的注册表项?

4

2 回答 2

7
$request = Zend_Controller_Front::getInstance()->getRequest()

?

于 2009-04-03T08:04:33.080 回答
1

虽然注册表方法 (1) 以及访问单例前端控制器 (2) 都可以工作,但这两种方法都有一些主要缺点:它们引入了对 theZend_Controller_Front或 theZend_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;
    }       
}
于 2009-04-03T08:37:07.073 回答