zend框架形式没有显示

时间:2011-02-08 05:22:49

标签: php oop model-view-controller zend-framework

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

我做了什么: 我用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_"

内部视图 - &gt; scripts-&gt; item-&gt; create.phtml执行了此操作:

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

然后在ItemController.php中:

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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()传递它们

另外,我对你的班级名称“形式”部分中的小写“f”有点不确定。从内存中,模块自动加载器将“表单”名称部分转换为模块中的“表单”目录。

但是我注意到你没有使用模块自动加载器(或者至少,你没有证明你是)


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

引导过程使用配置的appnamespace值(通常为“Application”)注册模块自动加载器,并使用基本路径“application”。

模块自动加载器自动为从配置的命名空间开始的类(例如“Application_”)注册一些类名/路径映射。这包括表格。

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

打开`Zend_Application_Module_Autoloader“查看完整列表。