2011-10-06 129 views
2

我有几个字段的zend窗体。Zend - 隐藏窗体并显示消息

当表单验证时,我想隐藏表单并显示成功消息。

有很多方法可以做到这一点 - 重定向到另一个控制器动作,渲染另一个视图脚本,在视图助手/会话等标志。

有没有最佳做法呢?

谢谢。

回答

1

我觉得很多时候人们使用张贴如果窗体已经公布,检查和有效,然后将一条信息传递到视图中的其他两个答案的解决方案。

我认为这种方法可以,但不是最优的。它将消息与工作流密切相关,并创建代码重复的需求。这不是必需的。应将IMO消息传递从工作流中除去,并使用可重用组件进行处理。碰巧,Zend Framework为我们提供了必要的工具,flashMessenger。

因此,我开始做的是向flashMessenger发送一条消息,无论何时我需要,它都会在下一次自动显示之后自动显示,与表单动作无关,并且不需要额外的标记和if语句。

例子和资源有关以FlashMessenger:

FlashMessenger效果最好通过这些链接找到的附加视图助手!

+0

你能举个例子吗?我仍然需要隐藏表单。 – Ran

+0

只需在google上搜索:http://aaronsaray.com/blog/2011/06/14/easy-flash-messenger-messages-in-zend-framework/ – JellyBelly

+0

和本参考手册ZF:http://framework.zend的.com /手动/ EN/zend.controller.actionhelpers.html – JellyBelly

1

这是我的方式:

在控制器中,当表单被提交为全成,我设置

$this->view->success_msg = "Success."; 

,并在视图文件我只是问:

<?php 
$success_msg = $this->success_msg; 
if(isset($success_msg)){ 
    echo $success_msg; 
}else{ 
    echo $form; 
} 
?> 
+0

我的观点是,如果在视图内部使用较少的内容,并且代码更具可读性, – JellyBelly

1

我想这个:

//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 ?> 
+0

@markus:出了什么问题? – JellyBelly

+0

没有什么是错的。我只是认为,只要有可能,SO应该使用示例代码,因为很多人会看到它。对变量名称使用缩写不是模范,这是不好的做法。所以我将msg改成了更易读的消息。 – markus

+0

好!谢谢你的提示! – JellyBelly