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 相关文章推荐
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
PHP提取中文首字母
Apr 09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
深入array multisort排序原理的详解
Jun 18 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
试用php中oci8扩展
Jun 18 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
PHP分享图片的生成方法
Apr 25 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
mysql 字段类型说明
2007/04/27 PHP
yii中widget的用法
2014/12/03 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
jupyter notebook实现显示行号
2020/04/13 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
Python grpc超时机制代码示例
2020/09/14 Python
python绘图模块之利用turtle画图
2021/02/12 Python
请用用Java代码写一个堆栈
2012/01/26 面试题
伦敦奥运会口号
2014/06/13 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
租房协议书范例
2014/10/14 职场文书
婚前协议书范本
2014/10/27 职场文书
小学教师个人总结
2015/02/05 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
学习委员竞选稿
2015/11/20 职场文书
导游词之西安大清真寺
2019/12/17 职场文书