文档章节

YII2---关于入口文件

0_0Loong
 0_0Loong
发布于 2017/03/21 23:36
字数 1607
阅读 1049
收藏 0

       一般项目文件常会被写为MVC模式,在所有的信息交互的时候会先将所有的信息进行一个自定义的“核实”过程。也就是会需要一个入口文件对于将要调用的方法所在文件是否存在,文件是否含有这样的指定函数。

       在入口文件还能宏观的引入文件,在后面可以不再次引用。入口文件是一般我们探索一个框架的起点。在这里就想吐槽下当时刚转后台的时候。作为前台转的宝宝对入口文件的理解有点呵呵。直接上来被大神师范了个基础,什么入口文件的基本写法什么。


题外两三句:
      入口文件作为一个前端宝宝就觉得这就是APPdelegate(IOS转的,就惯有思维了)默认先进来该准备的都准备好再说。

      自己写的入口文件必要的就是URL规则定义和报错设置,开启session。如果有跨域的问题在添加上跨域的设置。这些等我结束这个坑开始整理基础在来讲述吧。回到YII。

 

       YII的advance版本是一个整体化的项目模板,前端网站,后端管理员页面等都进行了规划。

     这是之前“安装”好的YII框架内容。和我们所想的不一样,没有看到传统意义的入口文件index.php。

     犹记得当初大佬讲过,入口文件永远在最外层,不是叫index.php就是和这个框架的名字一样~看到yii文件眼睛可以放下光了。打开这个文件会发现一些不一样的地方~

大神说:从文件内容的第一行 #!/usr/bin/env php 来看,这是一个bash脚本。 第一行在告诉bash,也在告诉我们,这是一个使用PHP运行的脚本。

下面就是一些PHP的写法了~

对模式的定义

        首先一进来看到两个define是指定项目的状态的。在YII项目有两种开发模式,线上模式和开发模式,除了在安装的时候指定,也可以在这里修改:
开发模式:

这个模式下回像我们在自己写的入口文件添加

error_reporting( E_ALL );//报告所有错误
或 error_reporting( 0 );//禁用错误报告

控制错误的报告情况。

如果定义了 YII_DEBUG , 那么表示当前为调试状态,应用在运行过程中,会有一些调试信息的输出。 在抛出异常时,也会有一个详细的调用栈的显示。默认情况下,YII_DEBUG 为 false 。 但在开发过程中,最好按上面写的那样,定义为 true 这样便于查找和分析错误。

如果定义了 YII_ENV ,那么就是指定了当前应用的运行环境。 上面的代码显示应用将运行于 dev 环境。默认情况下, YII_ENV 为 prod 表示产品环境。

这些环境只是一个名称,具体的意义和环境内容要看环境的定义。 dev prod 是Yii安装后默认的两个环境,分别表示开发环境和最终的产品环境。 此外还有一个 test 环境,表示测试环境。

环境与模式的作用不同。环境在代码中主要是影响配置文件。 YII_ENV 的 dev prod test 三种环境, 会分别使 YII_ENV_DEV YII_ENV_PROD YII_ENV_TEST 的值为 true 。 这样,在应用的配置中,特别是在相同的一个配置文件中,可以对不同环境作出不同的配置。

 

对文件的引入

引入4个必要文件:

第一个require引入了 /path/to/digpage.com/vendor 下面的 autoload.php 。 这个是composer的类自动加载机制注册文件。引入这个文件后,可以使用composer的类自动加载功能。

第二个引入了 vendor 下面的 yiisoft/yii2/Yii.php ,这是Yii的工具类文件。 引入了这个类文件后,才能使用Yii的提供的各种工具, 才有 Yii::createObject() Yii::$app 之类的东东可以使用。

第三个引入了 /path/to/digpage.com/common 下面的 config/bootstrap.php 。 这个文件主要用于执行一些Yii应用引导的代码,比如定义一系列的路径别名;可以给命名空间或者有前缀的文件名加以修饰。

第四个require引入了 path/to/digpage.com/frontend 下面的 config/bootstrap.php 。 作用与上面类似,只是其中的代码仅适用于当前应用(frontend)。 而第三个require中的,是适应于所有应用(common)。

再接下来,是一个函数 yii\helpers\ArrayHelper::merge() 。 这个函数的作用在于合并参数所指定的各个数组。其中,后面的数组会把前面数组中相同下标的元素覆盖掉。 这个语句的作用,就是读取、合并应用的各配置文件并保存在 $config 变量中。 这里我们看到一共是读取了4个配置文件:

依次是通用目录common下的2个配置文件,和当前应用frontend下的2个配置文件。 在优先顺序上,当前的配置覆盖通用的配置。 同时,带有 -local 的配置文件在后,所以,本地配置文件覆盖团队配置文件。

最后,以 $config 为参数,实例化了一个 Application 对象,并调用他的 run() 函数。 这时,Yii应用就跑起来了。

这就是整个项目的入口文件问题,这时候可以依次注释掉或打印看下每个配置文件的影响。从而加以修改。

     在看整个项目工程。其实这是因为这里面有几个小的模块。backend就是指后台开发模板,frontend值前端接口模板,common指公共模块。 由于 console 类的应用比较特殊,我们稍后再看。这里先看典型的Web应用的目录结构,寻找入口文件。这里指的是web的入口。。。我们的入口文件需要你选定开发模块,进入该模块才会看到。在backend的web路径下存在一个index文件。这里可以一一点开看下,这里入口文件和YII的入口文件内容一致。

 

参考网址:http://www.kancloud.cn/kancloud/yii-in-depth/50799

© 著作权归作者所有

0_0Loong
粉丝 8
博文 70
码字总数 64426
作品 0
西安
程序员
私信 提问
Yii2中关于组件的注册以及创建的方法详解

了解yii组件注册与创建的过程,并发现原来yii组件注册之后并不是马上就去创建的,而是待到实际需要使用某个组件的时候再去创建对应的组件实例的。本文大概记录一下这个探索的过程。   要了...

botkenni
2018/06/08
109
0
yii2源码分析之执行基本流程

用yii2框架用了将近2年,一直都没有去看过它底层源码, 马上快不用了,最近对其源码研究一番,哈哈 废话少说,上代码, 入口文件是web/index.php

china_lx1
2018/04/22
0
0
Yii学习笔记:扩展YiiBase入口类

通过yiic.php自动创建一个应用后,入口文件初始代码如下: <?php// change the following paths if necessary$yii=dirname(FILE).'/../yii/framework/yii.php';$config=dirname(FILE).'/prot......

吾爱
2013/12/27
1K
1
yii框架多项目共享在服务器和本地开发环境部署的一致性

一般在本地开发的话,大部分是把 YII 框架放在web 的根目录, 然后在子目录建立相应的项目目录,对应的部署到服务器上也,也要每个项目都要传一份Yii 框架文件到服务器上,造成空间资源的浪费,今后...

chinaphp
2013/07/07
1K
0
从配置文件的角度去了解Yii2

前言 Yii2是一个奇特的框架,其牺牲了现在盛行的解耦设计,用一个高度耦合的结构提供给开发者一个方便的几类抽象,Application,Module,Component,甚至是ServiceLocator.想让对象具备哪类特征就直...

Vett
2017/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部