2011-03-20 72 views
1

很明显,您应该使用异常来处理应用程序中的错误。但是,如果您真的使用合并的消息向实际用户展示他们?如何在基于MVC的网站中处理状态消息?

如果是这样,你必须国际化这些仍然可以管理的消息。但是简单的状态信息如“文件成功存储”呢?这些并不是错误,所以你不能为他们使用例外。你将如何处理这些?

我不喜欢为每个区域单独处理它们的想法,但宁愿采用全局统一的方式来处理将显示给用户的错误简单状态消息。什么是最好的方式来做到这一点?在模板级可能?这是正确的地方吗?

事件系统的最低严重程度/级别/类型是通知还是最高致命错误?这是可行的吗?

+0

为什么要向用户公开异常?这些错误是针对开发者的!捕捉异常并向用户显示有意义的消息,并将错误记录到文件/ db/email /中。 – Treffynnon 2011-03-20 17:05:28

+0

这就是我在第二句话中所要求的:)为什么不使用对两者都有用的消息?如果不是,你会如何将它们分开? – DanMan 2011-03-20 17:22:30

+0

我还没有找到一个异常结果直接适用于用户的实例。也许是表单验证异常,但即使如此,我仍然可以捕获它们并为用户添加翻译。 – Treffynnon 2011-03-20 18:16:02

回答

1

我为此使用了一个FlashMessage类。它将消息存储在会话中并显示在下一页加载。通过这种方式,您可以在所有模板中留出空间来显示消息,并且如果有一组,它将显示。然后,您可以重定向并POST到任何页面上,并显示消息。

+0

我最终使用了类似于您所描述的内容:一个注册表,它保存代码中任何位置的所有响应。有趣的部分是错误方法。将异常传递到包含内部错误消息的异常,并向用户显示错误消息。然后,异常实际上被抛出。 – DanMan 2011-05-28 15:32:13

0

我个人在模板级别上做到这一点。

例如...

控制器:

if(UsersModel::addNewUser($username)){ 
    $this->set("user_added", true); 
} 

在模板:

<? 
    if(!empty($user_added)){ 
    ?> 
     <p>User added successfully!</p> 
    <? 
    } 
?> 

与国际化没有问题(同时使用gettext)在这里也和控制器保持清晰:

if(!empty($user_added)){ 
     ?> 
      <p><?=_("User added successfully!");?></p> 
     <? 
} 
+0

这就是我想要避免的 - 在每个_individual_模板中测试_specific_条件。我想要一些更一般的东西,如:如果有消息(或消息),以某种方式将它(它们)添加到输出。 – DanMan 2011-03-20 17:18:07

相关问题