ZF:如何在Form方法中访问控制器的Request对象?

时间:2009-04-03 07:57:05

标签: php zend-framework request

如何在Form方法中访问Request对象? 我假设以某种方式可以访问控制器的请求对象 在Form方法中使用ActionHelper,但为其编写新类 这样的任务似乎过分了。

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

2 个答案:

答案 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}}