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

时间:2012-08-11 22:28:58

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

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

将每篇博文作为一个完全成熟的模型似乎很不错 对象填充了它的内容。然后你可以编写获取的方法 内部价值观。但是,“用户指南”中的所有示例似乎都显示了每个示例 控制器具有每个模型的一个实例并使用该对象来获取 包含数据库值的通用对象。另外,方式了 示例实例化模型($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?假设它是第二个,为什么示例模型定义了那些内部属性?

最后,对于奖励积分,如果我有其他这方面的问题,有哪些书, 我应该看一下文章或例子吗?

1 个答案:

答案 0 :(得分:4)

呃......名字叫“CodeIgniter”的灾难。

在该深层框架的文档中,他们将“模型”描述为实现活动记录模式的实例。这就是为什么你在该类的定义中得到无意义的属性。这只是AR模式的两个职责(存储和逻辑)之间冲突的另一个副作用。此外,您可能会注意到var关键字,这是PHP4的工件。

你所谓的“模特”不是。它们很简单domain objects,后来又成为模型的一部分。模型层是一个心理构造,就像MVC设计模式中的另一层 - 表示层。

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

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

至于教育材料,你会发现在this post结束时丢失了讲座和书籍。您可能还thisthis有些相关。