前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从配置文件的角度去了解Yii2

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

作者头像
botkenni
发布2022-01-10 10:57:36
9520
发布2022-01-10 10:57:36
举报
文章被收录于专栏:IT码农

前言

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甚至一个名不见经传的对象引用了yii\base\BootstrapInterface接口,并实现了bootstrap()方法.将直接调用这个方法.如果没有引用,那么仅仅会实例化它,同时存入对象容器.

既然提到bootstrap,这个阶段Yii2还会调用所用的extension,做上述相同的事情.如果你自己编写了关于Yii2的扩展,这时候它将被实例化并缓存到Yii的对象容器中.至于extension的编写,非常简单,只需要为你的extension添加一个Yii2能用的bootstrap入口即可(一个对象,引用yii\base\BootstrapInterface接口,并将其配置在extension的配置文件vendor\yiisoft\extensions.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的配置文件还是相对简洁的,正如作者"易"的初衷,一切都是那么简单.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/05/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 0. config/bootstrap.php
  • 1. config/main.php
    • 0. 'params'
      • 1. 'id'
        • 2. 'basePath'
          • 3. 'controllerNamespace'
            • 4. 'bootstrap'
              • 5. 'modules'
                • 6. 'component'
                  • 7. '事件on ...'
                    • 总结
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档