1

나는이 질문에 이미 답변을 알고있다. here. 그러나 이것은 나에게 맞지 않습니다. 는 양식이 PluginLoader 사용하여 생성됩니다컨트롤러에서 Zend_Form으로 params를 전달하는 방법은 무엇입니까?

$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; 
    } 
} 

을, 그래서 new $formClass();이 동일 new Form_Payment() 그런데 왜이 ISN입니다 매개 변수를 수락하지 않습니까?

+1

'Zend_Registry :: get ('formloader')'이 맞춤 플러그인입니까? 그 코드도 게시 할 수 있습니까? –

+0

매개 변수를 전달하지 않습니다. 양식에 무엇을 전달 하시겠습니까? – Phil

+0

@NandakumarV'Zend_Registry :: get ('formloader')'Form_Payment를로드하십시오. @Phil 저는 위의 코드를 편집 했으므로 지금은 더 명확해야합니다. – tecmec

답변

0

좋아, 나 자신에 의해 방법을 발견 컨트롤러에서 양식을 instanciating 후 호출 할 수 있습니다. 내 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 
     )) 
    } 

} 
-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(); 
+0

아니면'$ form-> setAction ('other/행동 ')'. 'Zend_Form :: setAction()'은 public 메서드입니다 – Phil

+0

양식에 이미 public 메서드가있는 경우 일반적으로 사용합니다 - 사용해야합니다 : – Vadyus

+0

@Vadyus하지만 값은 init 메서드에 알려야합니다. – tecmec