2011-02-08 101 views
2

我开始使用zend框架。我遇到了这个问题的形式。 当在浏览器中打开localhost/item/create时,只显示hello,表单不呈现。zend框架窗体没有显示

我做了什么: 我在我的项目创造了一个控制器zf.sh create controller item 然后zf.sh create action create item。 库文件夹里,创建APP-> forms-> ItemEditor.php

<?php 

class App_forms_ItemEditor extends Zend_Form 
{ 
    public function __construct() 
    { 
     $email = $this->createElement('text', 'email'); 
     $email->setLabel('Your email address:'); 
     $email->setRequired(TRUE); 
     $email->addValidator(new Zend_Validate_EmailAddress()); 
     $email->addFilters(array(
     new Zend_Filter_StringTrim(), 
     new Zend_Filter_StringToLower() 
     )); 
     $email->setAttrib('size', 40); 
     $this->addElement($email); 

    } 
} 

宣布在的application.ini文件命名空间

autoloaderNamespaces[] = "App_" 

内,则须─> scripts->用品 - > create.phtml这样做:

hello 
<?php 
echo $this->form->render(); 
?> 

,然后里面ItemController.php:

public function createAction() 
    { 
     $this->view->form=new App_forms_ItemEditor(); 
    } 

只在浏览器中显示hello,表格的其余部分未显示。任何人都可以指出我做错了什么。 谢谢

+0

你有没有看HTML源(在你的浏览器)? – zerkms 2011-02-08 05:26:25

回答

4

我认为原因是你覆盖Zend_Form :: __ constructor()。扩展Zend_Form的表单应该使用init()函数来初始化它们的元素,而不是__constructor()

+0

这并it.thanks! – anp 2011-02-08 05:47:20

3

来创建表单元素的最佳位置是覆盖init()方法,如

class App_forms_ItemEditor extends Zend_Form 
{ 
    public function init() 
    { 
     $email = $this->createElement('text', 'email'); 
     $email->setLabel('Your email address:'); 
     $email->setRequired(TRUE); 
     $email->addValidator(new Zend_Validate_EmailAddress()); 
     $email->addFilters(array(
     new Zend_Filter_StringTrim(), 
     new Zend_Filter_StringToLower() 
     )); 
     $email->setAttrib('size', 40); 
     $this->addElement($email); 

    } 
} 

如果劫持Zend_Form::__construct(),你至少应该接受相同的参数,并通过他们使用parent::__construct()

另外,我对你的类名称的“form”部分中的小写字母“f”有些不确定。从内存中,模块自动加载器将“Form”名称部分转换为模块中的“forms”目录。

然而,我注意到,你不使用模块自动加载(或至少,你还没有证明你是)


关于模块自动加载机...

自举过程使用配置的appnamespace值(通常为“应用程序”)和基本路径“应用程序”注册模块自动装载机。

模块自动加载器会自动注册以配置的名称空间(例如“Application_”)开头的类的某些类名/路径映射。这包括表单。

基本上,这意味着您可以创建application/forms/MyForm.php下的表单,其类名为Application_Form_MyForm,自动加载器会找到它。

打开`Zend_Application_Module_Autoloader”来查看完整列表。

+0

@Phil布朗又一次心灵的融合:-) – Marcin 2011-02-08 05:35:59