2010-06-17 19 views
6

Estoy tratando de probar mi formulario. Construirá otros objetos, entonces necesito una forma de burlarme de ellos. Traté de ellas pasa al constructor ...Zend Form: ¿Cómo pasar parámetros al constructor?

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

... pero me da una excepción:

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

¿Qué estoy haciendo mal?

Respuesta

11

Un vistazo rápido al sourcecode of Zend_Form muestra que la excepción se produce en el método __set(). El método se activa porque está asignando $_regionMapper sobre la marcha cuando no existe.

Declararlo en la clase y debería funcionar bien, p.

class Form_Event extends Zend_Form 
{ 
    protected $_regionMapper; 

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

Consulte el capítulo en Magic Methods in the PHP Manual.

+0

eso es todo! ¡gracias! – Andrew

1

Zend_Form constructor busca un patrón específico en los nombres de los métodos en su formulario. El patrón es setMethodName. el constructor llama al método MethodName y le pasa el parámetro.

Por lo que usted tiene esto en su clase:

class My_Form extends Zend_Form 
{ 

    protected $_myParameters; 

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

y se pasa los parámetros a su forma con:

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

Así que en lugar de params puede utilizar cualquier otro nombre (de Por supuesto, si no existe ya en Zend_Form).

Cuestiones relacionadas