【问题标题】:How do i achieve a path alias in yii如何在 yii 中实现路径别名
【发布时间】:2012-10-08 03:46:07
【问题描述】:

根据这个链接,我几乎设法实现了结构。但是路径别名让我感到困惑。有人可以解释一下我该如何做到这一点。

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

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

谢谢

【问题讨论】:

    标签: php yii


    【解决方案1】:

    使用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 配置本身中使用自动加载,指定导入数组不会降低性能,因为模型只有在被引用时才会被包含。

    【讨论】:

    • 最好的方法是自动加载,这意味着类将在被引用时被包含。但否则你必须先导入它,然后使用它,会更新答案。
    【解决方案2】:

    定义自己的路径别名的最好方法是在/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的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2014-07-22
      • 2021-01-21
      相关资源
      最近更新 更多