Как передать параметры из контроллера в 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();
Другие вопросы по тегам