【问题标题】:Zend Form: How to pass parameters into the constructor?Zend Form:如何将参数传递给构造函数?
【发布时间】:2011-03-05 01:58:59
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: php zend-framework zend-form phpunit


    【解决方案1】:

    快速查看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的章节。

    【讨论】:

      【解决方案2】:

      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 中不存在)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2015-10-11
        相关资源
        最近更新 更多