如何在基于 MVC 的网站中处理状态消息?

发布于 2024-10-24 06:11:09 字数 280 浏览 2 评论 0原文

很明显,您应该使用异常来处理应用程序中的错误。但是您真的应该使用合并的消息将它们显示给实际用户吗?

如果是这样,您必须将那些仍可管理的消息国际化。但是像“文件成功存储”这样的简单状态信息又如何呢?显然,这些不是错误,因此您不能对它们使用异常。你会如何处理这些?

我不喜欢必须单独处理每个区域的想法,但更喜欢一种全局的、统一的方式来处理将向用户显示的错误和简单状态消息。最好的方法是什么?也许在模板级别?那是正确的地方吗?

事件系统怎么样,最低的严重性/级别/类型是通知,最高的是致命错误?这可行吗?

It's clear that you should be using exceptions to handle errors in your app. But should you really use the incorporated messages to show them to the actual user?

If so, you'd have to internationalize those messages which is still manageable. But what about simple status information like "file successfully stored"? Those are not errors, obviously, so you can't use exceptions for them. How would you handle those?

I don't like the thought of having to deal with them for each area individually, but would prefer a global, unified way to handle error and simple status messages that will be shown to the user. What's the best way to do that? On the template level maybe? Is that the right place?

How about an event system, where the lowest severity/level/type would be a notice and the highest a fatal error? Is that feasible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯淡〆 2024-10-31 06:11:09

我使用 FlashMessage 类来实现此目的。它将消息存储在会话中并在下一个页面加载时显示。这样,您就可以在所有模板中留出一个空间来显示消息,如果有一组,则会显示该消息。然后,您可以重定向并 POST 到任何页面,并且将显示该消息。

I use a FlashMessage class for this purpose. It stores the message in a session and displays on the next page load. This way you can have a space in all your templates for displaying messages and if there is one set it will be displayed. You can then redirect and POST onto any page and the message will be displayed.

眼藏柔 2024-10-31 06:11:09

我个人在模板级别上这样做。

例如...

控制器:

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

在模板中:

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

这里的 i18n(使用 gettext)也没有问题,并且控制器保持清晰:

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

I personally do that on the template level.

For example...

Controller:

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

In the template:

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

No problems with i18n (using gettext) here too and Controller stays clear:

if(!empty($user_added)){
        ?>
            <p><?=_("User added successfully!");?></p>
        <?
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文