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的ASP防火墙
Oct 09 PHP
PHP中的cookie
Nov 26 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
解析ajax事件的调用顺序
Jun 17 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
php数字运算验证码的实现代码
Jul 30 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 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
php5.2时间相差8小时
2007/01/15 PHP
PHP的全局错误处理详解
2016/04/25 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
javascript数据类型详解
2017/02/07 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
Python网络编程详解
2017/10/31 Python
python实现微信远程控制电脑
2018/02/22 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
纯css3实现照片墙效果
2014/12/26 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
创业计划书六个要素
2013/12/26 职场文书
统计岗位职责
2014/02/21 职场文书
军训教官感言
2014/03/02 职场文书
党小组评议意见
2015/06/02 职场文书
汽车销售合同文本
2019/08/08 职场文书