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配置文件中最常用四个ini函数
Mar 19 PHP
PHP base64+gzinflate压缩编码和解码代码
Oct 03 PHP
php 时间计算问题小结
Jan 04 PHP
PHP 加密与解密的斗争
Apr 17 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
drupal 代码实现URL重写
May 04 PHP
PHP中其实也可以用方法链
Nov 10 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php自定义函数转换html标签示例
Sep 29 PHP
magento后台无法登录解决办法的两种方法
Dec 09 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 session 预定义数组
2009/03/16 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
destoon之一键登录设置
2014/06/21 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
Vue中props的使用详解
2018/06/15 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
Python入门篇之数字
2014/10/20 Python
python实现端口转发器的方法
2015/03/13 Python
Python实现Linux中的du命令
2017/06/12 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
使用python实现学生信息管理系统
2021/02/25 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
学校七一活动方案
2014/01/19 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
犯错检讨书
2014/02/21 职场文书
大三学习计划书范文
2014/05/02 职场文书
重阳节慰问信
2015/02/15 职场文书
支行行长岗位职责
2015/02/15 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技