3.3 模型目录

正常情况下,在Solar中,你会使用Solar::factory()创建一个新的对象实例;但是当你使用模型是,你经常需要在不同的地方实例化同一个模型。重复多次创建同一个对象最终会导致CPU和内存耗尽。

模型目录的目的是把所有模型对象实例存放在唯一的一个地方。一旦某个模型对象在模型目录中实例化了,以后每次你需要该模型对象的实例时,你可以重用它。

3.3.1 创建一个目录实例

要使用模型目录,当然你需要创建它的实例。默认情况下,Solar系统使用model_catalog名称在对象注册表中注册了Solar_Sql_Model_Catalog对象。所以你可以像这样获取它:

<?php
$model = Solar_Registry::get('model_catalog');

约定俗成地,根据上下文语境,我们称模型目录为$model$catalog。当然你可以随意给它取名字,只要它符合命名规则。但是考虑到词汇表,我们仍然建议你遵循约定。

3.3.2 从模型目录中获取模型

现在我们已经有一个模型目录了,我们可以从中获取模型对象实例。非常简单的操作:

<?php
// get the catalog
$model = Solar_Registry::get('model_catalog');
// get the blogs model from the catalog
$blogs = $model->blogs;

但是,这里有一个条件:你必须告诉模型目录模型类的位置。回忆一下,在博客演示章节中,我们曾在配置文件中配置过Solar_Sql_Model_Catalog ,就像下面这样:

<?php
$config['Solar_Sql_Model_Catalog']['classes'] = array('Acme_Model');

这样,使用$model->blogs就能够让模型目录实例化Acme_Model_Blogs类,并把它作为模型目录的一个属性,名为blogs。下次当你使用$model->blogs时,模型目录会直接返回给你一个模型对象实例。