2010-06-17 2 views
6

양식을 테스트하려고합니다. 그것은 다른 객체들을 생성 할 것이므로, 그것들을 조롱 할 방법이 필요합니다. 나는 ... 생성자에젠드 양식 : 생성자에 매개 변수를 전달하는 방법은 무엇입니까?

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 

내가 잘못하고있는 중이 야 무엇을?

답변

11

sourcecode of Zend_Form을 간략하게 살펴보면 __set() 메서드에서 예외가 throw 된 것을 보여줍니다. 이 메서드는 존재하지 않을 때 $_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 장을 참조하십시오.

+0

그게 전부 야! 고맙습니다! – Andrew

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에 아직없는 경우).

관련 문제