如何将params从控制器传递给Zend_Form?

时间:2012-12-13 11:42:17

标签: zend-framework zend-form zend-controller zend-config zend-loader

我知道这个问题已经回答here。但这对我不起作用。 使用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(),但为什么这不接受params?

2 个答案:

答案 0 :(得分:0)

好的,我自己找到了办法。 我正在寻找一种方法来在我的Zend_Form初始化时注入一些参数。这似乎唯一的方法是将params传递给构造函数 - 这是在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
         )) 
   }

}

答案 1 :(得分:-1)

您可以向表单类添加自定义函数,例如

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();