2010-06-17 8 views
6

Sto provando a testare il mio modulo. Costruirà altri oggetti, quindi ho bisogno di un modo per deriderli. Ho provato a passarli al costruttore ...Form Zend: come passare i parametri nel costruttore?

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

... ma ottengo un'eccezione:

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

Che cosa sto facendo di sbagliato?

risposta

11

Una rapida occhiata allo sourcecode of Zend_Form mostra che l'eccezione è stata generata nel metodo __set(). Il metodo viene attivato perché stai assegnando il codice $_regionMapper al volo quando non esiste.

Dichiararlo nella classe e dovrebbe funzionare correttamente, ad es.

class Form_Event extends Zend_Form 
{ 
    protected $_regionMapper; 

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

Vedere il capitolo Magic Methods in the PHP Manual.

+0

questo è tutto! grazie! – Andrew

1

Zend_Form Il costruttore cerca un modello specifico nel nome del metodo nel modulo. Il modello è setMethodName. il costruttore chiama il metodo MethodName e passa il parametro ad esso.

Così avrete questo nella vostra classe:

class My_Form extends Zend_Form 
{ 

    protected $_myParameters; 

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

E si passa i parametri per il modulo con:

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

Così, invece di params è possibile utilizzare altri nomi (di ovviamente se non esiste già in Zend_Form).