0

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

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

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

谢谢

4

2 回答 2

7

使用setPathOfAlias()YiiBase 类,设置路径别名:

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),它实际上做了几乎相同的事情(来自指南):

导入的类定义在第一次被引用之前实际上是不包括在内的(通过 PHP 自动加载机制实现)。

因此,要使用在common/models/中定义的 DummyModel 类:

Yii::import('site.common.models.DummyModel');
$model = new DummyModel;

我建议在 main.php 配置本身中使用自动加载,指定导入数组不会降低性能,因为只有在引用模型时才会包含模型。

于 2012-10-08T05:09:59.107 回答
1

定义自己的路径别名的最佳方法是在/config/main.php中添加“别名”数组:

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');

有关别名的更多信息在这里

于 2014-09-01T10:49:47.723 回答