2019独角兽企业重金招聘Python工程师标准>>>

前言

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的配置文件还是相对简洁的,正如作者"易"的初衷,一切都是那么简单.

作者:Vett
链接:https://www.jianshu.com/p/41e200c88779
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

G
M
T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters
Options : History : Feedback : Donate Close

转载于:https://my.oschina.net/botkenni/blog/1806113

从配置文件的角度去了解Yii2相关推荐

  1. 从需求的角度去理解Linux系列:总线、设备和驱动

    <从需求的角度去理解Linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文章,也是从需求的角度去理解Linux系统软件的开篇.这是作者精心撰写的经验总结,希望嵌 ...

  2. 另辟蹊径:从其他角度去解决数据库问题

    墨墨导读:2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者相聚北京,见证了个人的快速成长.技术的迭代进步.行业的蓬勃发 ...

  3. Android Fragment 从源码的角度去解析(上)

    ###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...

  4. 从作者的角度去阅读一本书-一种全新的阅读体验

    这是学习笔记的第 2373篇文章 最近在尝试和探索的新的学习方法,总体的感觉效率还是蛮高的,至少能够在短时间内有比较多的思考和产出,最近几天在进行类似的尝试,就是快速去阅读一本书,我的角度相比比较特别 ...

  5. 如果我是你~学会站在别人的角度去说话

    今天看书看到一个案例让我记忆深刻,这个故事让我觉得学会站在别人的角度去说话是多么重要的一件事.生活中有太多时候就是因为我们太过自我,没有站在别人的角度思考,一味的强调自己的想法,却失去了朋友的支持,一 ...

  6. 学思录(一):带着信息的角度去学习

    近期在读scott young 的<如何高效学习>,里面提到了信息的分类,其中我的专业--数学与应用数学学习的大多数是抽象信息.信息的理解阶段又分为几个:表面理解:理解信息的字面意思,以及 ...

  7. 任何事,尽量从正面、善意的角度去解读,运气都不会太差

    1.时刻坚信自己的未来 凡是乐观开朗的人,运气都不会太差.这是一个非常奇妙的现象. 反之,如果是内心阴暗.心怀不满且满嘴牢骚之人,势必难得幸福. 当然"付出不亚于任何人的努力"的& ...

  8. 从被淘汰技术的角度去进行平衡思考

    基于相同的创造理念.几乎在同一个时间段,索尼公司的井深大发明了改变人类娱乐生活的WALKMAN,这款电子产品无论知名度.商业价值还是技术成就都是GAME&WATCH所无法相比的,而对于身为技术 ...

  9. 从认知角度去理解设计

    设计并不是一味只求美感或者感觉,设计同样是一门建立在多学科基础上的科学,从认知角度来理解设计能帮助我们设计出更多尊重用户的作品,这样的设计才能经得起时间的考验,让更多用户所喜爱. 下面是我对<认 ...

最新文章

  1. jawstats php,JAWStats 配置(为AWStats配上华丽的外衣)
  2. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
  3. python对财务人员的帮助-还不熟练VBA的财务人,让Python带你弯道超车!
  4. boost::planar_canonical_ordering用法的测试程序
  5. iis 7.5应用程序池自动停止
  6. python 在数字前面自动补0
  7. 开发团队测试的难与易
  8. Javascript 仿Flash 图片切换 及 Flash 图片切换
  9. Java类型推断将不再支持可变性规范
  10. 购物商城Web开发第十四天
  11. 安装php_sqlsrv扩展
  12. css3媒体查询实例,css3 响应式媒体查询的示例代码
  13. 大脑是如何塑造你的感觉?
  14. php uchome,Uchome1.2 1.5 代码学习 common.php
  15. java public interface_Java 接口interface的基础
  16. 赛宁网安助力中国移动打造国内领先云安全能力
  17. html如何设置展开全文,Js实现点击查看全文(纯手工代码)
  18. 收藏的一些幽默搞笑文章
  19. Spring Boot 错题本
  20. Unity3d学习笔记 var 关键字

热门文章

  1. 优秀程序员写代码的七个优秀习惯
  2. LVS +DR +keepalived高可用性web集群
  3. 向窗体中拖放图片并显示
  4. 巧解Android时区加载过慢的问题
  5. TurboMail荣获2010年度优秀电子邮件产品殊荣
  6. 详解Linux交互式shell脚本中创建对话框实例教程
  7. 批量重置域用户密码(一)
  8. 图解利用Auto Deploy 部署ESXi 5.x参考v1.0
  9. F5发布最新文件虚拟化存储产品ARX 4000
  10. word如何设置标题编号