ZF: Как получить доступ к объекту Request контроллера в методе Form? - PullRequest
0 голосов
/ 03 апреля 2009

Как получить доступ к объекту запроса в методе Form? Я предполагаю, что как-то возможно получить доступ к объекту запроса контроллера использование ActionHelper внутри методов Form, но написание нового класса для такая задача кажется излишней.

Или я должен каким-то образом сохранить запрос контроллера в Zend_Registry и получить доступ к элементу реестра в форме?

Ответы [ 2 ]

7 голосов
/ 03 апреля 2009
$request = Zend_Controller_Front::getInstance()->getRequest()

1 голос
/ 03 апреля 2009

Хотя метод реестра (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;
    }       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...