1

この質問はすでにここで回答されていることを知っています。しかし、これは私にはうまくいきません。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()ですが、なぜこれがパラメーターを受け入れないのですか?

4

2 に答える 2

0

わかりました、私は自分で道を見つけました。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
         )) 
   }

}
于 2012-12-17T16:45:30.460 に答える