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->some_fake_parameter
不会做任何事情)
【讨论】:
不,不是这样。我的控制器是对的: $form = new Application_Form_Guestbook(); $this->view->form = $form;以上是关于Zend 框架 - 表单不呈现的主要内容,如果未能解决你的问题,请参考以下文章