CodeIgniter 的示例模型中的属性是什么?


What are the attributes in CodeIgniter's example model for?

在 CodeIgniter 用户指南中,示例模型具有每个属性相应数据库表中的字段:

    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();
    }

如果每篇博文只是一个通用对象,那么课程开始时的属性?

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

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

    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 的工件。

你所谓的"模型"不是。它们是简单的域对象,而这些对象又是以后模型的一部分。模型层是一种心理结构,就像MVC设计模式中的另一层 - 表示层一样。

$this->load->model() 方法不初始化"模型"实例。这只是CodeIgniters缺乏适当的自动加载机的另一个例子。此方法只是为了包含包含 Blog 类的文件。因此,你不能断定"博客"我应该是一个单一的对象。

控制器不应该"显示"任何东西。可以更改当前视图实例和模型层的状态。视图应该处理表示逻辑,选择如何显示某些内容以及使用哪些模板。视图不应该是愚蠢的模板。

至于教育材料,您会在本文末尾找到丢失的讲座和书籍。你也可能和这个有点相关。