先了解一下Yii2的入口文件即web目录下的index.php,这样有助于我们更好的理解各个目录下的配置文件,方便使用Yii2框架。
首先看一下index.php中的内容:
<?php defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require __DIR__ . '/../../vendor/autoload.php'; require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'; require __DIR__ . '/../../common/config/bootstrap.php'; require __DIR__ . '/../config/bootstrap.php'; $config = yii\helpers\ArrayHelper::merge( require __DIR__ . '/../../common/config/main.php', require __DIR__ . '/../../common/config/main-local.php', require __DIR__ . '/../config/main.php', require __DIR__ . '/../config/main-local.php' ); (new yii\web\Application($config))->run();
对代码解释
defined('YII_DEBUG') or define('YII_DEBUG', true);
表示当前定义的是调试模式,应用在运行的过程中会有一些调试信息输出,方便开发过程中调试错误,在生产环境中设置为false。
defined('YII_ENV') or define('YII_ENV', 'dev');
指定当前项目的运行环境,dev为开发环境,prod为生产环境,test为测试环境。
YII_ENV 的 dev,prod,test 分别对应YII_ENV_DEV,YII_ENV_PROD,YII_ENV_TEST 的值为true, 这样在同一个配置文件下可以对不同的环境做不一样的配置。
比如:
$config = []; if (!YII_ENV_TEST) { //以下配置项仅在测试环境中起作用 $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module'; $config['modules']['gii'] = 'yii\gii\Module'; }
__DIR__表示当前文件index.php所在目录。对照第二篇中目录的介绍相信大家很容易就能找到对应的目录下的文件吧,/../…/common 表示根目录下的common,/../ 表示当前目录。
require __DIR__ . '/../../vendor/autoload.php'; //引入autoload.php,这是composer的类自动加载机制, //引入后Yii2下的类可以自动加载 require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'; //yii的工具类,引入后yii可以使用内置的工具, //比如Yii::createObject() Yii::$app 之内的东东。 require __DIR__ . '/../../common/config/bootstrap.php'; //此文件中可以定义一些路径的别名 require __DIR__ . '/../config/bootstrap.php'; //这个也可以定义别名但是只针对当前目录下的应用(frontend)适用
接下来我们看一下yii\helpers\ArrayHelper::merge()这个函数,这个函数的作用是合并参数所指定的各个数组,其中后面的数组会把前面的覆盖掉,这个函数的作用就是读取,合并配置文件并保存在$config中。在入口文件中一个读取了四个配置文件,两个根目录common下配置和两个frontend/config下的配置文件,在优先顺序上当前配置会覆盖通用的配置,带有-local的会覆盖不带的,即本地配置会覆盖生产环境的配置(由此思考一下我们在生产环境是不是要避免上次带-local的配置呢)。
最后以$config为参数,实例化一个Application对象,并且调用他的run()函数,这时Yii就可以运行起来啦。
评论抢沙发