【问题标题】:Where do I manipulate and sanitize data from database in MVC PHP?在 MVC PHP 中,我在哪里操作和清理数据库中的数据?
【发布时间】:2014-02-24 17:08:09
【问题描述】:

假设我有一个模型 User_modelget_all_users() 函数:

Class User_model {
    function get_all_users() {
        $query = $this->db->query("SELECT * FROM users");
        return $query->result(); // Returns array with data
    }
}

我应该在我的应用程序中的哪个位置清理数据以供输出?到目前为止,我已经在get_all_users() 中通过循环遍历结果并返回一个包含经过处理和操作的数据的数组来完成此操作。问题就在这里:假设我的数据库表中有一个日期字段,我希望我根据用户所在的页面以不同的方式格式化。或者我有一些数据需要在 htmlspecialchars() 上运行。

想到的第一个想法是在我的视图中清理和格式化数据,但感觉不对。我应该在视图和模型之间有某种层来完成这项工作吗?在那种情况下这将如何运作?还是应该以其他方式处理?

【问题讨论】:

  • 这个问题相当广泛。有很多方法和地方可以做到这一点。但是,我个人最喜欢的是为特殊情况创建一系列对象。数据、字符串、电子邮件等。并让每个人始终输出其内容的清理版本。然后日期对象可以有一个 $date->format() 方法等等。他们都可以实现__toString()

标签: php database-abstraction


【解决方案1】:

这很难,但我会在模型中提取数据,并在控制器中清理它。因此,如果数据库发生变化,您可以轻松修复查询

【讨论】:

    【解决方案2】:

    强烈不同意布莱恩。

    View 正是执行此操作的正确位置。并且明确地是唯一这样做的地方。

    只有视图知道数据的去向。转换数据的方式完全取决于数据的去向 - 以及针对 HTML (htmlspecialchars())、URL 字符串 (urlencode())、Javascript 字符串 (addslashes() 或最好json_encode()) ,电子邮件 (quoted_printable_encode())....

    假设我有一个日期字段...对我来说以不同的方式格式化

    这甚至不是净化的问题,而是呈现的问题——这仍然存在于视图的领域。

    【讨论】:

      【解决方案3】:

      您还可以创建一个清理数据的视图助手,以便在所有视图文件中重复使用。

      【讨论】:

        猜你喜欢
        • 2011-02-02
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        相关资源
        最近更新 更多