Хотя метод реестра (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;
}
}