`
dcj3sjt126com
  • 浏览: 1872218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[应用结构]入口脚本

    博客分类:
  • Yii2
阅读更多

入口脚本

入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。

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);

// fcgi 默认没有定义 STDIN 和 STDOUT
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));

// 注册 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 框架入口脚本示例分析

    对于控制台应用,其入口脚本的结构与Web应用类似,但它加载的是控制台专用的配置文件,并通过命令行运行。控制台应用通过指定的路由、参数和选项来执行特定任务。 在Yii框架中,全局常量YII_DEBUG、YII_ENV和YII_...

    非常简单的Shell菜单脚本

    本文介绍的“非常简单的Shell菜单脚本”就是一种基础的Shell脚本应用,它创建了一个简单的菜单系统,使用户能够通过选择编号来执行不同的功能,实现了人机交互的“傻瓜式”操作。 首先,脚本通过`#!/bin/sh`行指定...

    electronwebpack使用webpack编译Electron应用程序的脚本和配置

    2. **创建项目结构**:设置 src 和 main 目录,src 存放应用的前端代码,main 存放主进程代码(Electron 应用的入口文件)。 3. **配置 webpack**:创建 webpack.config.js 文件,根据项目需求进行配置,例如添加预...

    组态软件开发脚本功能Demo

    “ScriptTest”可能是项目的一个主程序或测试模块,可能包含运行脚本功能的入口点和相关的测试用例。通过运行这个文件,我们可以看到脚本功能的实际效果,测试其正确性和性能。 总的来说,这个Demo展示了如何将C#...

    PHP__单入口MVC模式实例

    单入口MVC模式则是这种模式的一个变体,它强制所有请求都通过一个单一的入口点进入,从而更好地控制和管理应用程序流程。 首先,让我们详细了解一下“单入口”概念。在单入口MVC模式下,所有的HTTP请求都会通过一个...

    智联招聘简历刷新脚本

    【智联招聘简历刷新脚本】是一个基于Laravel框架开发的应用程序,主要目的是为了方便用户自动刷新在智联招聘网站上的简历,以提高其在求职市场中的曝光度。Laravel是一个广泛使用的开源PHP框架,以其优雅的语法和...

    VB脚本从入门到精通

    - **概述**: VBScript通过ActiveX脚本机制与宿主应用程序通信,简化了脚本部件的集成,使宿主可以统一管理脚本的编译、入口点调用和命名空间。 - **跨平台性**: 微软提供了32位Windows API、16位Windows API以及...

    自动生成Oralce脚本工具

    6. `ProgramStart.cs`: 可能包含了程序启动时的初始化代码,如应用程序入口点和全局设置。 7. `tool.csproj`: 这是项目的配置文件,定义了项目的所有组件,包括源代码文件、引用库、编译设置等,用于Visual Studio等...

    VUE多应用项目搭建源码

    7. **项目结构**:一个典型的Vue多应用项目结构可能包括`src`目录下的`pages`或`apps`子目录,每个子目录代表一个应用,包含各自的入口文件、组件、样式等资源。此外,还有`public`目录存放静态资源,如HTML模板和...

    thinkphp5+layui后台系统(含数据库脚本).rar

    在这个系统中,数据库脚本可能是用于初始化数据库结构和填充测试数据的SQL文件。ThinkPHP5框架提供了数据库操作类库,使得开发者能方便地执行SQL语句,进行数据的CRUD操作。数据库设计通常遵循关系数据库理论,可能...

    e语言单开脚本

    编写单开脚本意味着你需要掌握如何在易语言中创建主程序入口,管理程序的生命周期,以及处理输入和输出等基本编程概念。 在提供的文件列表中,我们看到两个文件:内部 完整版打图单开.e和zy。其中,“.e”是易语言...

    LinuxShell脚本编程实例.pdf

    在Linux Shell脚本编程中,菜单Shell脚本是一种常见的应用场景。菜单Shell脚本是通过使用case语句和read命令来实现菜单选择的。在脚本中,case语句用于匹配用户的输入,read命令用于读取用户的输入。 在脚本中,...

    VB.NET genesis2000脚本接口及演示

    通常,一个控制台应用程序(Console Application)会包含一个主入口点,开发者可以在这里编写代码来调用Genesis2000的接口,并在控制台窗口中输出结果或进行交互。 总的来说,这个示例为那些希望在VB.NET环境中使用...

    链接器脚本介绍中文版

    #### 二、链接器脚本的语法与结构 链接器脚本通常由以下几部分组成: 1. **输出格式**: 定义输出文件的类型。例如,`OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf386-i386")` 指定了输出文件为32位Intel x86...

    基于Python的微博超话签到脚本源码.zip

    虽然没有给出具体的文件内容,但根据压缩包子文件的文件名称列表中的"weibo_supertopic_sign-main",我们可以推测这是一个主要的Python代码文件,可能是整个脚本的入口文件。通常,这种文件名结构表示它是项目的主...

    PERL脚本打包视频教材(Genesis)

    - **配置**: 配置打包选项,如设置入口点(即程序启动执行的脚本),选择需要包含的库和模块,以及设置图标和其他元数据。 - **编译与测试**: 使用PDK的内置编译器将源代码转化为可执行文件,并进行测试,确保在...

    完全使用Linux shell脚本语言编写的一个简单的作业管理系统

    8. **脚本调用与流程控制**:main_interface.sh很可能是整个系统的入口点,它调用其他脚本并控制整体流程。`source`或`.`命令可以用来执行一个脚本并将其内容导入当前环境。 9. **脚本调试**:在开发和维护过程中,...

    金盾提取脚本

    Molebox是一款用于软件保护和加密的应用程序,它可以将可执行文件和其他资源打包到一个单独的执行文件中,以隐藏原始程序的结构,增加逆向工程的难度。 #### 原始入口点 (OEP) 在软件保护领域,OEP是指程序在被保护...

    Python淘宝抢购脚本 Python实现淘宝商城自动抢购-毫秒级响应

    Python是一种广泛应用于自动化任务的高级编程语言,其语法简洁,易于学习,丰富的第三方库使其成为自动化脚本的理想选择。 Selenium是一个强大的Web自动化测试框架,可以模拟用户在浏览器中的各种操作。在淘宝抢购...

    Linux启动脚本

    其中`APP_HOME`指定了应用程序的主要目录,而`APP_MAINCLASS`则指定了应用程序的入口类名。这些配置项需要根据实际的应用程序进行设置。 ##### 4. 类路径配置 为了确保Java程序能够找到所有必要的类库,脚本还会...

Global site tag (gtag.js) - Google Analytics