Yii 框架入口脚本示例分析


Posted in PHP onMay 19, 2020

本文实例讲述了Yii 框架入口脚本。分享给大家供大家参考,具体如下:

入口脚本

入口脚本是应用启动流程中的第一环, 一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。 终端用户的请求通过入口脚本实例化应用并将请求转发到应用。

Web 应用的入口脚本必须放在终端用户能够访问的目录下, 通常命名为 index.php, 也可以使用 Web 服务器能定位到的其他名称。

控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php), 该文件需要有执行权限, 这样用户就能通过命令 ./yii <route> [arguments] [options] 来运行控制台应用。

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

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

Web 应用

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

<?php
 
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
 
// 注册 Composer 自动加载器
require __DIR__ . '/../vendor/autoload.php';
 
// 包含 Yii 类文件
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
 
// 加载应用配置
$config = require __DIR__ . '/../config/web.php';
 
// 创建、配置、运行一个应用
(new yii\web\Application($config))->run();

控制台应用

以下是一个控制台应用的入口脚本:

#!/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');
 
// 注册 Composer 自动加载器
require __DIR__ . '/vendor/autoload.php';
 
// 包含 Yii 类文件
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。

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

defined('YII_DEBUG') or define('YII_DEBUG', true);

上面的代码等同于:

if (!defined('YII_DEBUG')) {
 define('YII_DEBUG', true);
}

显然第一段代码更加简洁易懂。

常量定义应该在入口脚本的开头,这样包含其他 PHP 文件时, 常量就能生效。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
提问的智慧(2)
Oct 09 PHP
一个php作的文本留言本的例子(三)
Oct 09 PHP
dedecms模版制作使用方法
Apr 03 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
php实现的简单多进程服务器类完整示例
Feb 01 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 #PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 #PHP
PHP项目多语言配置平台实现过程解析
May 18 #PHP
Yii 框架使用Forms操作详解
May 18 #PHP
thinkphp 框架数据库切换实现方法分析
May 18 #PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 #PHP
php + ajax 实现的写入数据库操作简单示例
May 16 #PHP
You might like
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
简单实现js上传文件功能
2017/08/21 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python实现图片中文字分割效果
2019/07/22 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Django models.py应用实现过程详解
2019/07/29 Python
python3 下载网络图片代码实例
2019/08/27 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
super()与this()的区别
2016/01/17 面试题
运动会表扬稿大全
2014/01/16 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
三好学生评语大全
2014/12/29 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
go goth封装第三方认证库示例详解
2022/08/14 Golang