【发布时间】:2012-10-08 03:46:07
【问题描述】:
根据这个链接,我几乎设法实现了结构。但是路径别名让我感到困惑。有人可以解释一下我该如何做到这一点。
http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/#hh5
我希望前端的控制器能够从公共文件夹访问这些模型。
谢谢
【问题讨论】:
根据这个链接,我几乎设法实现了结构。但是路径别名让我感到困惑。有人可以解释一下我该如何做到这一点。
http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/#hh5
我希望前端的控制器能够从公共文件夹访问这些模型。
谢谢
【问题讨论】:
使用setPathOfAlias() of YiiBase class,设置路径别名:
Yii::setPathOfAlias('site', $site);
你可以在前端的配置 main.php 中做到这一点:
$site=dirname(dirname(dirname(__FILE__))); // this will give you the / directory
Yii::setPathOfAlias('site', $site);
return array(
// the config array
// incase you want to autoload the models from common
'import'=>array(
'site.common.models.*'
)
);
在没有自动加载的情况下,在这种情况下,您必须先包含模型,然后才能实例化它。要包含我们可以使用 Yii::import($alias) ,它实际上做了几乎相同的事情(from guide):
被导入的类定义在第一次被引用之前实际上是不包含的(通过PHP自动加载机制实现的)。
所以要使用在 common/models/ 中定义的 DummyModel 类:
Yii::import('site.common.models.DummyModel');
$model = new DummyModel;
我建议在 main.php 配置本身中使用自动加载,指定导入数组不会降低性能,因为模型只有在被引用时才会被包含。
【讨论】:
定义自己的路径别名的最好方法是在/config/main.php中添加'aliases'数组:
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'Project name',
'aliases'=>array(
'myalias'=>'/path/to/some/folder',
),
'import'=>array(
'myalias.models.*'
)
...
然后在你的代码中的任何地方你都可以得到你的别名的路径:
echo Yii::getPathOfAlias('myalias');
更多关于别名here的信息。
【讨论】: