我如何在yii中实现路径别名

时间:2012-10-08 03:46:08

标签: php yii

根据这个链接,我几乎设法实现了这个结构。但路径别名让我很困惑。有人可以解释我如何实现这一目标。

http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/#hh5

我希望我的控制器在前端从公共文件夹访问这些模型。

谢谢

2 个答案:

答案 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的更多信息。