2010-06-17 39 views
6

Tôi đang cố gắng kiểm tra biểu mẫu của mình. Nó sẽ được xây dựng các đối tượng khác, vì vậy tôi cần một cách để chế giễu chúng. Tôi đã cố gắng đi qua chúng vào các nhà xây dựng ...Biểu mẫu Zend: Cách chuyển tham số vào hàm tạo?

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

... nhưng tôi nhận được một ngoại lệ:

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

Tôi đang làm gì sai?

Trả lời

11

Xem nhanh sourcecode of Zend_Form cho biết Ngoại lệ được ném theo phương pháp __set(). Phương thức này được kích hoạt vì bạn đang gán $_regionMapper khi không tồn tại.

Tuyên bố nó trong lớp và nó sẽ hoạt động tốt, ví dụ:

class Form_Event extends Zend_Form 
{ 
    protected $_regionMapper; 

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

Xem chương trên Magic Methods in the PHP Manual.

+0

là vậy! cảm ơn bạn! – Andrew

1

Zend_Form hàm tạo tìm kiếm một mẫu cụ thể trong tên của phương thức trong biểu mẫu của bạn. Mẫu là setMethodName. constructor gọi phương thức MethodName và chuyển tham số cho nó.

Vì vậy, bạn sẽ có điều này trong lớp học của bạn:

class My_Form extends Zend_Form 
{ 

    protected $_myParameters; 

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

Và bạn vượt qua các thông số mẫu của bạn với:

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

Vì vậy, thay vì params bạn có thể sử dụng bất kỳ tên khác (của nếu nó không tồn tại trong Zend_Form).

Các vấn đề liên quan