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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php实现微信公众号无限群发
Oct 11 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
在laravel中实现事务回滚的方法
Oct 10 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP中操作ini配置文件的方法
2013/04/25 PHP
PHP扩展开发入门教程
2015/02/26 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python获取文件所在目录和文件名的方法
2017/01/12 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python之列表推导式的用法
2019/11/29 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
python的dict判断key是否存在的方法
2020/12/09 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
优秀员工表扬信
2014/01/17 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2014年接待工作总结
2014/11/26 职场文书
单位更名证明
2015/06/18 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL