从配置文件的角度去了解Yii2

2022-01-10 10:57:36 浏览数 (2)

前言

Yii2是一个奇特的框架,其牺牲了现在盛行的解耦设计,用一个高度耦合的结构提供给开发者一个方便的几类抽象,Application,Module,Component,甚至是ServiceLocator.想让对象具备哪类特征就直接继承相应的对象,想要改变他就去复写父类的方法,虽然不符合开放封闭原则,单一职责原则,李氏替换原则等面向对象设计原则,但的确很方便.

本文就从Yii2 Advance版本的配置文件着手,详细介绍配置文件角度的Yii2框架,其中涉及到的部分内核方面的要点将在后续文章中逐一说明.

Yii2的配置文件分两级:

  1. common级别
  2. 站点级别

common顾名思义,通用的配置文件.站点级别会复写common级别的配置,作用域也是站点.

0. config/bootstrap.php

由于Yii2为了简化开发难度,所以用户定义的目录加载方式全部使用Yii2自己定义的autoload方法(Yii.php中注册的BaseYii.php中的autoload),而不是编辑composer.json然后dump autoload.

用法是将所有路径在index.php中全部注册到全局容器Yii中.方法就是Yii::setAlias();方法.

编辑的地方就确定在这个bootstrap.php文件中,但这个阶段并不是Yii的bootstrap阶段,只是在index.php中触发.有歧义,需要注意.

在common级别中,设置的是站点的root.在site中设置的是module的root.

1. config/main.php

main里面有比较多的设置项.

0. 'params'

首先require所有包括common和本站点的全部params.php(params-loacl.php),并将返回值放在params键下.

1. 'id'

就是当前站点的名称

2. 'basePath'

顾名思义,站点根目录

3. 'controllerNamespace'

站点下(非module中)controller的命名空间,在MVC阶段,Yii2.0会根据这个属性结合路由自动生成controller的命名空间.module级别的controller中controllerNamespace需要重新定义,可以在Module.php的init()方法中直接赋值.

4. 'bootstrap'

这个配置有点意思,和bootstrap.php不同,这个才是真正作用于bootstrap阶段的定义,方法就是在里面写入你需要在bootstrap阶段响应的module或者component甚至是任何对象.

响应什么呢?有两种情况,如果你的module或者component甚至一个名不见经传的对象引用了yiibaseBootstrapInterface接口,并实现了bootstrap()方法.将直接调用这个方法.如果没有引用,那么仅仅会实例化它,同时存入对象容器.

既然提到bootstrap,这个阶段Yii2还会调用所用的extension,做上述相同的事情.如果你自己编写了关于Yii2的扩展,这时候它将被实例化并缓存到Yii的对象容器中.至于extension的编写,非常简单,只需要为你的extension添加一个Yii2能用的bootstrap入口即可(一个对象,引用yiibaseBootstrapInterface接口,并将其配置在extension的配置文件vendoryiisoftextensions.php中).

5. 'modules'

对应的modules(例如backend)目录下的Module对象的命名空间.方便Yii2进入你所定义的module.

module在Yii2中是一组MVC的封装,这个概念可能在其他框架中不同,例如laravel.

6. 'component'

其实这个东西,在ZendFramework3.0中叫做module,是一个功能的实现,比如权限管理,路由管理,过滤器等等.

在Yii2中会对部分component内置好'class'字段的配置,也就是说,作为开发人员,你不需要知道这个component对应的对象在哪里,直接配置后使用就可以了.当然如果自己写的话必须指定component的对象入口.

component和module一样,和Yii2的整个启动流程联系极其紧密,如果想详细理解,必须清楚其启动流程,后续文章会详细说明.

component的配置如果想详细的了解,必须清楚了解Yii2的DI和对象模型,后续文章详细介绍.文章在这里

7. '事件on ...'

这个有点特殊,但是非常好用,你可以为Application(注意,其他事件,例如MVC,由于实例不同,这里的绑定对其无效)的默认事件绑定callable,让其在对应的时期触发.Yii2的事件管理会单独开文说明.

总结

Yii2的配置文件还是相对简洁的,正如作者"易"的初衷,一切都是那么简单.

0 人点赞