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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
用PHP生成静态HTML速度快类库
Mar 18 PHP
php下通过POST还是GET来传值
Jun 05 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
深入密码加salt原理的分析
Jun 06 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
php实现jQuery扩展函数
2009/10/30 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python pymongo模块用法示例
2018/03/31 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
python全局变量引用与修改过程解析
2020/01/07 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python实现图像拼接
2020/03/05 Python
打架检讨书800字
2014/01/10 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
奖学金个人总结
2015/03/04 职场文书
政审证明材料
2015/06/19 职场文书
监护人证明
2015/06/19 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
Golang 入门 之url 包
2022/05/04 Golang
python运行脚本文件的三种方法实例
2022/06/25 Python