今天在学习一个例子的时候,应用zend_from来实现表格无论如何也出不来,还报错,错误如下:
Fatal error: Call to a member function setLabel() on a non-object in XXX
我的代码是:
BookFrom 类的实现:
class BookForm extends Zend_Form
{
public function _construct($options=null)
{
parent::_construct($options);
$this->setName('book');
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$author = new Zend_Form_Element_Text('author');
$author->setLabel('Author');
$author->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$isbn = new Zend_Form_Element_Text('isbn');
$isbn->setLabel('Isbn');
$isbn->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$id = new Zend_Form_Element_Hidden('id');
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id,$name,$author,$isbn,$submit));
}
}
调用BookForm类:
function addbookAction()
{
$this->view->title = "Add new book";
$form = new BookForm();
$form->submit->setLabel('Add'); /***************报错提示的是这一行,无法找到对象**********************/
$this->view->form = $form;
}
经过查找,利用zend_debug::dump()函数输出$form实例,里边是空的,什么都没有,原来是在BookForm类定义的时候,构造函数打错了:
function _construct($options=null) // construct前边是两个‘_’而不是一个‘_’
parent::_construct($options);//同上
应该改为:
function __construct($options=null)
parent::__construct($options)
这部分就可以了。
之后又出现一个错误如下:
Fatal error: Uncaught exception 'Zend_Form_Exception' with message 'Element must be specified by string or Zend_Form_Element instance' in D:\php\WWW\library\library\Zend\Form.php:1065 Stack trace: #0 D:\php\WWW\library\application\models\bookform.php(31): Zend_Form->addElement(Array) #1 D:\php\WWW\library\application\controllers\IndexController.php(23): BookForm->__construct() #2 D:\php\WWW\library\library\Zend\Controller\Action.php(516): IndexController->addbookAction() #3 D:\php\WWW\library\library\Zend\Controller\Dispatcher\Standard.php(308): Zend_Controller_Action->dispatch('addbookAction') #4 D:\php\WWW\library\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 D:\php\WWW\library\public\index.php(52): Zend_Controller_Front->dispatch() #6 {main} thrown in D:\php\WWW\library\library\Zend\Form.php on line 1065
看了一下是因为我的bookfrom类的添加元素函数打错了:
$this->addElement(array($id,$name,$author,$isbn,$submit));
这个函数应该是 addElements(array()); 少打了一个S.以后要多注意函数拼写,原因还是不熟悉一些zend框架提供的函数,需要多加练习