Zend 框架 - 表单不呈现

Posted

技术标签:

【中文标题】Zend 框架 - 表单不呈现【英文标题】:Zend framework - form not rendering 【发布时间】:2011-10-27 11:31:39 【问题描述】:

我刚刚开始使用 Zend Framework,并且正在关注最新版本 (1.11.10) 的快速入门文档。一切都很好,但是当我放置表单代码并运行应用程序时,表单没有呈现。我的代码和http://framework.zend.com/manual/en/learning.quickstart.create-form.html一模一样

在视图上,我可以使用var_dump($this->form); 很好地转储表单 我试过echo $this->form()echo $this->form->render(),但什么都没出现……会是什么?

【问题讨论】:

发布表单的源代码,我的猜测是,如果它的 var_dumping 没有问题,它应该呈现,除非表单内部出现问题。 这里:pastebin.com/ceHyusFT 在此处发布表单转储。 【参考方案1】:

我遇到了这样的问题(完全相同的形式,因为它是 eclipse 示例) 我的问题是由于误解。因为我认为我必须直接访问视图脚本。我在浏览器中输入了类似的内容:hostname/application/view/script/something.php 但在 zend 中,所有访问都应该通过公用文件夹。您必须像这样访问视图:hostname/app_name/public/guestbook 希望对你有帮助

【讨论】:

【参考方案2】:

当 Zend 找不到元素的模板文件时,可能会出现此问题。看下面的代码:

 $element->setDecorators(array(
            array('ViewScript',
                array(
                    'viewScript' => 'directory/_input.phtml'
                )
            )
        ));

文件_input.phtml 必须位于此控制器的正确文件夹中。否则 Zend 无法找到输入模板,无法成功渲染您的元素,也不会显示任何内容。

【讨论】:

【参考方案3】:

好的,所以我尝试了您的代码,它对我来说没问题。 一切都在这里:

控制器

<?php
class IndexController extends Zend_Controller_Action

    public function myTestAction()
    
        $form = new Form_Guestbook();

        // ... processing logics
    if($this->getRequest()->isPost())
    
    if($form->isValid($this->getRequest()->getPost()))
    
        var_dump($form->getValues());
    
    
        $this->view->assign('form', $form);
    

表格

        <?php
        class Form_Guestbook extends Zend_Form
        
            public function init()
            
                // Set the method for the display form to POST
                $this->setMethod('post');

                // Add an email element
                $this->createElement('text', 'email', array(
                    'label'      => 'Your email address:',
                    'required'   => true,
                    'filters'    => array('StringTrim'),
                    'validators' => array(
                        'EmailAddress',
                    )
                ));

                // Add the comment element
                $this->addElement('textarea', 'comment', array(
                    'label'      => 'Please Comment:',
                    'required'   => true,
                    'validators' => array(
                        array('validator' => 'StringLength', 'options' => array(0, 20))
                        )
                ));

                // Add a captcha
                $this->addElement('captcha', 'captcha', array(
                    'label'      => 'Please enter the 5 letters displayed below:',
                    'required'   => true,
                    'captcha'    => array(
                        'captcha' => 'Figlet',
                        'wordLen' => 5,
                        'timeout' => 300
                    )
                ));

                // Add the submit button
                $this->addElement('submit', 'submit', array(
                    'ignore'   => true,
                    'label'    => 'Sign Guestbook',
                ));

                // And finally add some CSRF protection
                $this->addElement('hash', 'csrf', array(
                    'ignore' => true,
                ));
            
        
    ?>

查看

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

可见:http://yaconiello.com/index/my-test

如果这不适合您,您可能遇到了配置错误。

【讨论】:

奇怪...它不适合我...也许它是我的控制器?这是控制器:pastebin.com/2gnYSQvN 也可能是配置错误,但它不应该出现在 apache 的错误日志中吗? 您确定要在视图中回显 $this->form->render 吗? 绝对。这是代码:请使用下面的表格在我们的留言簿上签名! form->setAction($this->url());回声 $this->form->render(); ?> 我也试过 echo $this->form 但也没用 对不起,我在本地运行。如果您愿意,我可以压缩项目并将其放在文件共享服务上。【参考方案4】:

确保将表单从控制器传递给视图。

在您的操作处理程序中:

$this->view->form = $my_form;

在您看来:

echo $this->form;

我怀疑这是您的问题的原因,因为如果您尝试回显不存在的参数,Zend 框架不会抱怨。 (即echo $this-&gt;some_fake_parameter 不会做任何事情)

【讨论】:

不,不是这样。我的控制器是对的: $form = new Application_Form_Guestbook(); $this->view->form = $form;

以上是关于Zend 框架 - 表单不呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何在 zend 框架 2 中呈现页面?

在 zend 框架中填充子表单的问题

Zend 框架表单与 jquery

Zend 框架 - 定制表单验证

zend 框架显示/处理表单使用相同的动作/视图?

检索 Zend 框架中的子表单元素?