【发布时间】:2011-10-06 11:35:56
【问题描述】:
我有一个包含几个字段的 zend 表单。
表单验证后,我想隐藏表单并显示成功消息。
有很多方法可以做到这一点 - 重定向到另一个控制器操作、渲染另一个视图脚本、在视图助手/会话中标记等等。
这方面有什么最佳做法吗?
谢谢。
【问题讨论】:
标签: php zend-framework zend-form
我有一个包含几个字段的 zend 表单。
表单验证后,我想隐藏表单并显示成功消息。
有很多方法可以做到这一点 - 重定向到另一个控制器操作、渲染另一个视图脚本、在视图助手/会话中标记等等。
这方面有什么最佳做法吗?
谢谢。
【问题讨论】:
标签: php zend-framework zend-form
我认为人们经常使用其他两个答案中发布的解决方案,检查表单是否已发布且有效,然后将消息传递给视图。
我认为这种方法还可以,但不是最优的。它将消息与工作流紧密联系在一起,并产生了对代码重复的需求。这不是必需的。 IMO 消息传递应从工作流程中取出,并使用可重用组件进行处理。碰巧的是,Zend Framework 为我们提供了必要的工具 flashMessenger。
所以,我开始做的是向 flashMessenger 发送一条消息,每当我需要它时,它会在下一次往返后自动显示,与表单操作无关,并且不需要额外的标记和 if 语句。
关于 flashMessenger 的示例和资源:
FlashMessenger 与通过这些链接找到的附加视图助手配合使用效果最佳!
【讨论】:
这是我的方式:
在控制器中,当表单提交成功时,我设置
$this->view->success_msg = "Success.";
在视图文件中我只是问:
<?php
$success_msg = $this->success_msg;
if(isset($success_msg)){
echo $success_msg;
}else{
echo $form;
}
?>
【讨论】:
我认为是这样的:
//into controller
$form = new Form_Foo();
if ($this->getRequest()->isPost() && $form->isValid($_POST)) {
$this->view->message = "Post Successful!!!";
} else {
$this->view->form = $form;
}
和
//into view
<?= $this->message ?>
<?= $this->form ?>
【讨论】: