正常情况下,在Solar中,你会使用Solar::factory()创建一个新的对象实例;但是当你使用模型是,你经常需要在不同的地方实例化同一个模型。重复多次创建同一个对象最终会导致CPU和内存耗尽。
模型目录的目的是把所有模型对象实例存放在唯一的一个地方。一旦某个模型对象在模型目录中实例化了,以后每次你需要该模型对象的实例时,你可以重用它。
要使用模型目录,当然你需要创建它的实例。默认情况下,Solar系统使用model_catalog
名称在对象注册表中注册了Solar_Sql_Model_Catalog对象。所以你可以像这样获取它:
<?php
$model = Solar_Registry::get('model_catalog');
约定俗成地,根据上下文语境,我们称模型目录为$model
或
$catalog
。当然你可以随意给它取名字,只要它符合命名规则。但是考虑到词汇表,我们仍然建议你遵循约定。
现在我们已经有一个模型目录了,我们可以从中获取模型对象实例。非常简单的操作:
<?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
时,模型目录会直接返回给你一个模型对象实例。