你现在的位置:首页 > PHP网站建设知识库 > Yii > 正文

yii框架学习小结

项目路径 E:/htdocs

yii包放在htdocs下,同级目录中有项目文件夹project

project下面建yii目录,此目录为yiic生成的程序框架

index.php文件中定义了yii框架包中的接口类路径,以及主要配置文件main.php的路径。/protected/config/main.php

之后是统一的入口。

require_once($yii);

Yii::createWebApplication($config)->run();

其中的$config就是main的路径。


createWebApplication($config) => createApplication('CWebApplication',$config) => new CWebApplication($config)

CWebApplication extends CApplication extends CModule extends CComponent

CWebApplication 无构造函数,于是调用CApplication 的 __construct($config)

构造函数中给类中变量赋值

self::$_app = CWebApplication 的对象。

$this->_basePath = main文件所在目录的上一层。/protected

$_aliases['application'] = E:/htdocs/project/yii/project

$_aliases['webroot'] = E:/htdocs/project/yii

$_aliases['ext'] = E:/htdocs/project/yii/project/extensions

initSystemHandlers函数初始化异常及错误句柄。

configure($config)=>foreach($config as $key=>$value) $this->$key=$value;

$config中有

array(7) {
  [0]=>
  string(4) "name"
  [1]=>
  string(8) "language"
  [2]=>
  string(7) "preload"
  [3]=>
  string(6) "import"
  [4]=>
  string(7) "modules"
  [5]=>
  string(10) "components"
  [6]=>
  string(6) "params"
}
其中name是CApplication 中变量
preload是CModule 中变量

其余的key都是通过重写的__set函数赋值

CComponent中的__set方法会判断当前类中是否有"set".$key这个函数,如果有,就返回该函数的返回值。

所以configure($config)相当于执行了setlanguage, setimport, setmodules, setcomponents, setparams这几个函数。

setimport会调用yii:import($v)
通过self::getPathOfAlias($v)设置$_aliases[$v] = $_aliases['application'] . $v中application和*之间的部分.

设置self::$_includePaths为上面的$_aliases[$v]的值。

例:main.php中

'import'=>array(

        'application.models.*',

         ...............
)

$_aliases[application.models.*]  = E:\htdocs\project\yii\protected\models

self::$_includePaths[X] = E:\htdocs\project\yii\protected\models


接下来是setmodules函数

该函数会判断main.php中modules字段中的key(下面用$key表示)对应的values(数组)是否设置了以class为key的键值对。

如未设置,$this->_modulePath = "E:\htdocs\project\yii\protected\modules"

$_aliases[$key]  = E:\htdocs\project\yii\protected\modules\$key

同时给该数组增加key为class的值。该值为$key.'.'.ucfirst($key).'Module' 。并把该值赋给$this->_moduleConfig[$key]

例:main.php中

'modules'=>array(

        'test' => array( ),

        ....................
)
$_aliases['test']  == E:\htdocs\project\yii\protected\modules\test

$this->_moduleConfig['test'] == array('class'=>"test.TestModule")


setcomponents函数是给$this->_componentConfig赋值。

setparams是给$this->_params赋值。