Yii2学习笔记系列8——Application Structure-Entry Scripts(应用结构之入口脚本)

一 11 四月 2016

Yii2学习笔记系列8——Application Structure-Entry Scripts(应用结构之入口脚本)

入口脚本

入口脚本是应用启动流程中的第一步,一个应用只有一个入口脚本,终端用户的请求通过入口脚本实例化应用并将请求转发到应用。

Yii中Web应用的入口脚本存放在终端用户可以访问的目录下,名为index.php,当然,我们也可以使用Web服务器定位到其他名称的文件。

Yii中Console应用的入口脚本在应用根目录下,名为yii(格式为.php文件),该文件需要有执行权限,这样儿用户就可以通过命令./yii <route> [arguments] [options]来运行Console应用了。

入口脚本主要用来完成以下的工作:

  • 定义全局常量;
  • 注册Composer自动加载器
  • 包含Yii类文件;
  • 加载应用配置;
  • 创建并配置一个应用的实例;
  • 调用yii\base\Application::run()来处理请求。

Web应用

以下是基础应用模板入口脚本的代码:

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

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

Console应用

以下是Console应用的入口脚本:

#!/usr/bin/env php
<?php
/**
 * Yii console bootstrap file.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

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

$config = require(__DIR__ . '/config/console.php');

$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);

定义常量

入口脚本是定义全局常量的最好的地方,Yii支持以下三个常量:

  • YII_DEBUG:标识应用是否运行在调试模式。当处于调试模式下,应用会保留更多的日志信息,如抛出异常,显示详细的错误调用堆栈等等,因此,调试模式主要运用在开发阶段,YII_DEBUG的默认值是false。
  • YII_ENV: 指定当前应用的运行环境。有关详情请参照配置部分YII_ENV的默认值是'prod',即线上生产环境。
  • YII_ENABLE_ERROR_HANDLER:用来标识是否启用Yii提供的错误处理,默认为true。

当定义一个常量时,通常使用类似如下的代码来定义:

<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
?>

上面的代码就等同于:

<?php
if (!defined('YII_DEBUG')) {
    define('YII_DEBUG', true);
}
?>

显然,还是第一段代码更加简洁易懂。常量的定义应该放在入口脚本的最开始部分,这样儿当include其他PHP文件时,常量就可以生效了。

Category: PHP Develop

Comments