【问题标题】:Zend - Hide Form and Show MessageZend - 隐藏表单并显示消息
【发布时间】:2011-10-06 11:35:56
【问题描述】:

我有一个包含几个字段的 zend 表单。

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

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

这方面有什么最佳做法吗?

谢谢。

【问题讨论】:

    标签: php zend-framework zend-form


    【解决方案1】:

    我认为人们经常使用其他两个答案中发布的解决方案,检查表单是否已发布且有效,然后将消息传递给视图。

    我认为这种方法还可以,但不是最优的。它将消息与工作流紧密联系在一起,并产生了对代码重复的需求。这不是必需的。 IMO 消息传递应从工作流程中取出,并使用可重用组件进行处理。碰巧的是,Zend Framework 为我们提供了必要的工具 flashMessenger。

    所以,我开始做的是向 flashMessenger 发送一条消息,每当我需要它时,它会在下一次往返后自动显示,与表单操作无关,并且不需要额外的标记和 if 语句。

    关于 flashMessenger 的示例和资源:

    FlashMessenger 与通过这些链接找到的附加视图助手配合使用效果最佳!

    【讨论】:

    【解决方案2】:

    这是我的方式:

    在控制器中,当表单提交成功时,我设置

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

    在视图文件中我只是问:

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

    【讨论】:

    • 我的想法是在视图中使用较少的 if 和 else 并且是更易读的代码。
    【解决方案3】:

    我认为是这样的:

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

    【讨论】:

    • 没有错。我只是认为,只要有可能,SO 应该使用示例性代码,因为很多人都会看到它。对变量名使用缩写不是典型的做法,这是不好的做法。所以我把 msg 改成了更易读的消息。
    猜你喜欢
    • 2023-04-10
    • 2018-07-06
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多