Zend Form:如何将参数传递给构造函数?

时间:2010-06-17 17:12:33

标签: php zend-framework zend-form phpunit

我正在尝试测试我的表单。它将构建其他对象,所以我需要一种方法来模拟它们。我尝试将它们传递给构造函数......

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

...但我得到一个例外:

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

我做错了什么?

2 个答案:

答案 0 :(得分:12)

快速查看sourcecode of Zend_Form会在__set()方法中显示异常。触发该方法是因为您在不存在的情况下即时分配$_regionMapper

在课堂上声明它,它应该可以正常工作,例如

class Form_Event extends Zend_Form
{
    protected $_regionMapper;

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

请参阅Magic Methods in the PHP Manual一章。

答案 1 :(得分:1)

Zend_Form构造函数在表单中的方法名称中查找特定模式。模式为setMethodName。构造函数调用MethodName方法并将参数传递给它。

所以你在课堂上会有这个:

class My_Form extends Zend_Form
{

    protected $_myParameters;

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

然后将参数传递给表单:

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

因此,您可以使用任何其他名称(当然,如果params中尚未存在),而不是Zend_Form