2010-06-17 11 views
6

Próbuję przetestować mój formularz. Będzie budował inne obiekty, więc potrzebuję sposobu na kpiny z nich. Próbowałem przekazując je do konstruktora ...Zend Form: Jak przekazać parametry do konstruktora?

class Form_Event extends Zend_Form 
{ 
    public function __construct($options = null, $regionMapper = null) 
    { 
     $this->_regionMapper = $regionMapper; 
     parent::__construct($options); 
    } 

... ale pojawia się wyjątek:

Zend_Form_Exception: Only form elements and groups may be overloaded; variable of type "Mock_Model_RegionMapper_b19e528a" provided 

Co robię źle?

Odpowiedz

11

Szybkie spojrzenie na sourcecode of Zend_Form pokazuje wyjątek wyrzucony w metodzie __set(). Metoda jest wyzwalana, ponieważ przypisujesz $_regionMapper w locie, gdy ona nie istnieje.

Zadeklaruj to w klasie i powinno działać poprawnie, np.

class Form_Event extends Zend_Form 
{ 
    protected $_regionMapper; 

    public function __construct($options = null, $regionMapper = null) 
    { 
     $this->_regionMapper = $regionMapper; 
     parent::__construct($options); 
    } 

Zobacz rozdział o Magic Methods in the PHP Manual.

+0

to wszystko! Dziękuję Ci! – Andrew

1

Zend_Form Konstruktor szuka określonego wzorca w nazwach metod w formularzu. Wzór jest setMethodName. konstruktor wywołuje metodę MethodName i przekazuje do niej parametr.

Więc masz to w swojej klasie:

class My_Form extends Zend_Form 
{ 

    protected $_myParameters; 

    public function setParams($myParameters) 
    { 
     $this->_myParameters = $myParameters; 
    } 

I przekazać parametry do formularza z:

$form = new My_Form(array('params' => $myParameters)); 

więc zamiast params można używać innych nazw (z oczywiście, jeśli nie istnieje już w Zend_Form).

Powiązane problemy