三、应用基础目录basePath、路径别名aliases与类的导入Yii::import()

我们接着看CWebApplication的构造函数(下文中将CWebApplication简称webapp)

public function __construct($config=null)
    {
        //将创建的webapp实例赋值给Yii的静态属性$app,在整个进程中可以使用Yii::app()来使用这个应用对象,这是一个单例模式
        Yii::setApplication($this);
        //在赋值app应用对象之后,webapp应用对象导入$config指向的配置文件路径,并将配置文件中返回的数组赋值给$config变量
        if(is_string($config))
            $config=require($config);
 
        //如果我们在此处打印$config,你会发现,打印出来的数组就是protected/config/main.php里的数组
        //我们可以看到,$config数组中basePath对应的值是个路径,指向的是protected目录,这个目录就是基础应用目录,setBasePath方法
        是将basePath的值赋值给webapp的私有变量$_basePath,在网页的任何地方,我们都可以使用Yii::app()->basePath来调用获取该路径
        if(isset($config['basePath']))
        {
            $this->setBasePath($config['basePath']);
            unset($config['basePath']);
        }
        else
            $this->setBasePath('protected');
        //设置application,webroot,ext三个路径别名,路径别名顾名思义是对某一个路径的简称,详见下文setPathOfAlias方法
        Yii::setPathOfAlias('application',$this->getBasePath());
        Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME']));
        if(isset($config['extensionPath']))
        {
            $this->setExtensionPath($config['extensionPath']);
            unset($config['extensionPath']);
        }
        else
            Yii::setPathOfAlias('ext',$this->getBasePath().DIRECTORY_SEPARATOR.'extensions');
        //如果配置文件中有自定义路径别名aliases,则设置相应的路径别名
        if(isset($config['aliases']))
        {
            $this->setAliases($config['aliases']);
            unset($config['aliases']);
        }
    }
方法 Yii::setPathOfAlias ,实际上是用webapp用一个私有的静态属性$_aliases的一个数组来管理路径别名,在页面的任何地方你都可以使用Yii : :getPathOfAlias来获取路径别名对应的全路径,路径别名结合Yii::import()方法导入一个类是YII中常用的导入类方式,你可以通过Yii : :import( 'alias.path.to.ClassName'),使用路径别名来导入一个类,比如Yii::import('application.controllers.SiteController')表示导入SiteController类,Yii::import('application.controllers.*')则表示导入controllers目录下面的所有类,Yii::import()只会在第一次使用该类时导入,而且比requre_once和Include_once更高效;
public static function setPathOfAlias($alias,$path)
    {
        if(empty($path))
            unset(self::$_aliases[$alias]);
        else
            self::$_aliases[$alias]=rtrim($path,'\\/');
    }


你可能感兴趣的:(yii,yii视频)