Как передать параметры из контроллера в Zend_Form?
Я знаю, что этот вопрос уже дан ответ здесь. Но это не работает для меня. Форма генерируется с помощью PluginLoader:
$formClass = Zend_Registry::get('formloader')->load('Payment');
$form = new $formClass(array('someval' => $my_arr));
Payment.php:
class Form_Payment extends Zend_Form
{
protected $_someval = array();
public function init()
{
$this->setAction('payment/save');
//....
$this->addElement('multiCheckbox', 'store_id', array('label' => 'Someval:', 'required' => true, 'multiOptions' => $this->getSomeval()))
}
public function setSomeval($someval) {
$this->_someval = $someval;
}
public function getSomeval() {
return $this->_someval;
}
}
Как я вижу, метод load возвращает только имя класса, поэтому new $formClass();
равно new Form_Payment()
но почему это не принимает параметры?
2 ответа
Решение
Хорошо, я нашел способ сам. Я искал способ ввести некоторые параметры, пока мой Zend_Form был инициализирован. Кажется, единственный способ для этого - передать параметры конструктору, который выполняется перед методом init.
class Form_Payment extends Zend_Form
{
private $_someval;
public function __construct(array $params = array())
{
$this->_someval = $params['someval'];
parent::__construct();
}
public function init()
{
$this->setAction('payment/save');
//....
$this->addElement('multiCheckbox', 'store_id',
array('label' => 'Someval:',
'required' => true,
'multiOptions' => $this->_someval // passed params now available
))
}
}
Вы можете добавить пользовательскую функцию в свой класс формы, как
class Form_Payment extends Zend_Form
{
public function init()
{
$this->setAction('payment/save');
// and so on
}
public function doSome()
{
$this->setAction('other/action');
}
}
и вызвать его после создания формы в контроллере
$form = new $formClass();
$form->doSome();