根据这个链接,我几乎设法实现了这个结构。但路径别名让我很困惑。有人可以解释我如何实现这一目标。
http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/#hh5
我希望我的控制器在前端从公共文件夹访问这些模型。
谢谢
答案 0 :(得分:7)
使用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配置中使用自动加载,在指定导入数组时没有性能下降,因为只有在引用模型时才会包含模型。
答案 1 :(得分:1)
定义自己的路径别名的最佳方法是在 /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的更多信息。