Zend Form: How to pass parameters into the constructor?

Andrew picture Andrew · Jun 17, 2010 · Viewed 7.7k times · Source

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?

Answer

Gordon picture Gordon · Jun 17, 2010

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.