【问题标题】:Zend framework - form not renderingZend 框架 - 表单不呈现
【发布时间】: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 没有问题,它应该呈现,除非表单内部出现问题。
  • 在此处发布表单转储。

标签: php forms zend-framework render


【解决方案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;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多