I'm trying to test my form. It will be constructing other objects, so I need a way to mock them. I tried passing them into the constructor...
class Form_Event extends Zend_Form
{
public function __construct($options = null, $regionMapper = null)
{
$this->_regionMapper = $regionMapper;
parent::__construct($options);
}
...but I get an exception:
Zend_Form_Exception: Only form elements and groups may be overloaded; variable of type "Mock_Model_RegionMapper_b19e528a" provided
What am I doing wrong?
A quick look at the sourcecode of Zend_Form
shows the Exception is thrown in the __set()
method. The method is triggered because you are assigning $_regionMapper
on the fly when it doesn't exist.
Declare it in the class and it should work fine, e.g.
class Form_Event extends Zend_Form
{
protected $_regionMapper;
public function __construct($options = null, $regionMapper = null)
{
$this->_regionMapper = $regionMapper;
parent::__construct($options);
}
See the chapter on Magic Methods in the PHP Manual.
Zend_Form
constructor looks for a specific pattern in method's names in your form. The pattern is setMethodName
. the constructor calls the MethodName
method and pass the parameter to it.
So you'll have this in your class :
class My_Form extends Zend_Form
{
protected $_myParameters;
public function setParams($myParameters)
{
$this->_myParameters = $myParameters;
}
And you pass the parameters to your form with :
$form = new My_Form( array('params' => $myParameters) );
So instead of params
you can use any other names ( of course if it doesn't already exists in Zend_Form
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With