【问题标题】:CodeIgniter error handling [closed]CodeIgniter 错误处理
【发布时间】:2013-07-04 08:05:10
【问题描述】:

我想知道哪种方法可以正确处理 CodeIgniter 中的错误,特别是 MVC 模式。我说的不仅仅是 sql 错误,而是说你有用户级别的访问控制系统,每个级别都可以访问网站的特定部分。

如果有人试图进入他级别的禁地怎么办?

或者如果你根据一些条件执行一个控制器,而这些条件不满足?

在不混淆浏览和使用应用程序的最终用户的情况下控制错误的最佳方法是什么?

我想知道你是怎么做到的。

当发生错误或其他情况时,您是否使用不同的视图和控制器?

【问题讨论】:

    标签: php codeigniter exception exception-handling


    【解决方案1】:

    你在问两个不同的事情。

    第一个:

    但是如果您有一个可以编辑某些内容的表单,但根据用户级别,您无法编辑。

    如果用户没有权限,您可以做到这一点,但不显示表单中的字段,也不更新数据库。

    if ($user_has_permissions)
    {
    echo form_input('field_name');
    echo form_input('field_name');
    }
    

    以及更新行时

    if ($user_has_permissions)
    {
    $this->db->set('db_field_name', $field_name);
    }
    

    如果您想在表单验证中显示错误消息,请使用回调 (callbaks in CodeIgniter)。 检查用户是否有权限,如果没有则显示消息。

    第二个

    使用 die() 不是一个选项,我只是不想让我的整个应用程序崩溃

    如果您不想在不使用 die() 的情况下停止执行,您可以使用其他一些“更友好”的形式来执行此操作:

    show_404();
    show_error();
    show_error('Description of your error');
    

    这将停止执行并显示带有错误描述的精美屏幕。

    【讨论】:

    • 这就是我的意思。但略有不同。我用 3 到 4 年的过程风格编写 PHP 应用程序,几个月来我试图深入研究 MVC 和 OOP,有时我会想到这样的愚蠢问题。 :D 据我所知,视图中不允许使用逻辑代码,除非它是根据某些用户和视图条件显示某些内容。我可以隐藏该用户级别看不到的链接,但是如何阻止整个控制器执行?用 if($user_level... 包装它对我来说似乎有点蹩脚。所以我正在寻找正确的做法:)
    • 如果你不希望整个控制器被执行,使用 show_error('No permission message') 在构造函数中
    • 我使用另一种方法。如果用户有权限,我有一个返回的模型。如果没有,我会重定向到一个显示页眉、页脚、标题等的控制器,但我没有加载视图,而是加载了一个带有大图标的视图:“您不允许在这里”。
    【解决方案2】:

    您可以在数据库中指定用户的访问级别。如果用户尝试访问禁止访问的地方,您可以在用户数据中存储一些错误并在视图中显示它们(如果已设置)。

    codeigniter 会话类文档:http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

    【讨论】:

    • 感谢您的回答! :) 不,我的意思不同。用户级系统的实现对我来说不是问题。问题是何时发生异常。我不知道哪种是显示错误的正确方法。使用die() 不是一种选择,我只是不想让我的整个应用程序崩溃。如果你有一个表单很容易你有 form_validation 并且你可以专门显示每个字段的错误,但是如果你有一个可以编辑某些内容的表单,但是根据用户级别你不能编辑。如何显示错误?也许对错误有不同的看法?
    • 您可以创建一个拒绝访问的视图来告诉用户发生了什么。然后传递一个指向视图的链接,让他们回到他们来自的地方。
    • 我认为如果他们试图更改不允许的信息,你最好使用 javascript 或 jquery 来显示错误。例如,您可以向具有当前字段的函数发送 ajax 请求。该函数可以检查数据库中存储在会话中的用户级别。您可以在数据库中拥有这些字段以及所需的最低用户级别。如果它更少,你可以抛出异常。
    • AJAX 是我想到的第一件事,但还不够。现在我隐藏了禁区的链接,但是如果有人试图找到漏洞怎么办?我想要额外的安全感。我认为额外的控制器和错误视图将完成工作。我不想弄乱“干净”的页面视图。
    • 我正在考虑这样的事情:用户加载articles/edit/1。我编写了一个全局方法来检查用户级别,该方法将访问页面所需的用户级别作为参数。当调用edit方法时,他调用user-level检查方法并检查是否满足要求。如果一切正常,edit 方法会继续执行,但如果级别有问题,level-access 方法会加载错误视图并显示当前错误。这个解决方案好吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多