我正在尝试测试我的表单。它将构建其他对象,所以我需要一种方法来模拟它们。我尝试将它们传递给构造函数......
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
我做错了什么?
答案 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);
}
答案 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
。