php - CodeIgniter 示例模型中的属性有什么用?

标签 php codeigniter database-abstraction

在 CodeIgniter 用户指南中,example model每个都有一个属性 对应数据库表中的字段:

    class Blogmodel extends CI_Model {

        var $title   = '';
        var $content = '';
        var $date    = '';
        //...

然而,当它返回一组博客文章时,它们只是通用对象。

    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

如果每篇博客文章都只是一个通用对象,那么目的是什么 类(class)开头的属性?

将每篇博文作为一个成熟的模型似乎会很好 用它的内容填充的对象。然后你可以编写获取的方法 内部值(value)。但是,用户指南中的所有示例似乎都显示了每个 Controller 具有每个模型的一个实例并使用该对象来获取 包含数据库值的通用对象。此外,方式 示例实例化模型 ($this->load->model('Blog');) 很明显 您只需要在 Controller 中拥有一个模型实例。

如果我的博文有一个 status 值存储在 数据库作为一个整数,但在几个不同的 Controller 中我想展示 值作为人类可读的字符串,我应该把那个函数/方法放在哪里?因为我需要它 在多个 Controller 中,它特定于一个对象,我认为它应该是 模型对象的方法。如果每篇博文都是模型的一个实例,我 可以这样写:

    function get_human_status()
    {
        $lookup = array(
            1 => 'Active',
            2 => 'Hidden',
            3 => 'Pending');
        return $lookup[$this->status];
    }

但是,如果每篇博客文章都是一个通用对象,则它必须如下所示:

    function get_human_status($data)
    {
        $lookup = array(
            1 => 'Active',
            2 => 'Hidden',
            3 => 'Pending');
        return $lookup[$data->status];
    }

哪种方式更符合 CodeIgniter 的习惯?假设是第二种,为什么示例模型要定义那些内部属性?

最后,加分,如果我还有其他这种性质的问题,什么书, 我应该查看文章或示例吗?

最佳答案

呃..名为“CodeIgniter”的灾难。

在那个糟糕的框架的文档中,他们将“模型”描述为实现事件记录模式的实例。这就是您在该类的定义中获得无意义属性的原因。这只是 AR 模式中两种职责(存储和逻辑)之间冲突的另一个副作用。此外,您可能会注意到 var 关键字,它是 PHP4 的产物。

您所说的“模型”不是。它们很简单 domain objects ,这又是模型的一部分。模型层是一种心理构造,就像 MVC 设计模式中的另一层 - 表示层一样。

$this->load->model()方法没有初始化“模型”实例。这只是 CodeIgniter 缺少适当的自动加载器的另一个例子。此方法仅用于包含包含 Blog 类的文件。因此,您不能断定“博客”i 应该是一个单一的对象。

Controller 不应该“显示”任何东西。那里有改变当前 View 实例和模型层的状态。 View 应该处理表示逻辑,选择如何显示某些内容以及使用哪些模板。 View 不应该是愚蠢的模板。

至于教育 Material ,你会在this post的末尾找到丢失的讲座和书籍。 .你也可以 thisthis有点相关。

关于php - CodeIgniter 示例模型中的属性有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918167/

相关文章:

php - Elasticsearch排除结果

sqlite - 如何使用模型在钛中创建数据库表?

php - CodeIgniter get() 没有返回行

php - 如果表单字段输入为空而不是在数据库 CodeIgniter 中更新

Codeigniter - 调用未定义的函数 set_value()

php - 数据访问层和数据库抽象层的区别和重构数据库类

php - 计算单词在 PHP 文本中出现的频率

php - Composer 更新 Laravel

php - 将sql表的1列内容传输到另一列

php - 匹配逗号分隔值存储在数据库 php codeigniter