【yii】yii之组件详解-加载逻辑
admin
2023-02-11 17:20:06
0

加载逻辑

Yii中组件components的加载是在CApplication被实例化的时候执行的。

代码:

public function __construct($config=null) 
{ 
    ...... 
    $this->preinit(); 
    $this->initSystemHandlers(); 
    $this->registerCoreComponents(); 
    $this->configure($config);    
    $this->attachBehaviors($this->behaviors);              
    $this->preloadComponents(); 
    $this->init(); 
}


1.Yii首先调用$this->registerCoreComponents()方法来注册核心组件如错误处理、

URL管理、请求、安全管理、日志等,

2.然后调用$this->configure($config)来加载配置,

3.接着调用$this->preloadComponents来预先创建在配置文件中列入'preload'配置项的那

些组件实例,

4.最后调用$this->init()进行初始化操作。

那么如果你定义了自己的urlManager,你的urlManager究竟是什么时候覆盖掉原先已经注册的缺

省核心组件的呢?

代码:

public function configure($config) 
{ 
    if(is_array($config)) 
    { 
        foreach($config as $key=>$value) 
            $this->$key=$value; 
    } 
}


很简单的实现,就是把config文件中的各个配置项设置为CApplication的属性键值对,看起来没做

任何和组件注册/加载相关的事情。

实际上这里是通过魔法函数来实现自定义组件的注册的,CApplication的基类是CModule,而

CModule的基类是CComponent,在调用$this->components='....' 的时候,实际上PHP

自动触发了CComponent__set方法,该方法被Yii重载,调用了setter方法(set+$name)

setcomponents(注意:PHP函数大小写不敏感,所以实际调用的是CModule类的

setComponents方法)来注册了应用自定义的组件。

现在搞清楚了组件是如何注册和预先加载的,那究竟什么时候自定义组件会失效呢?


1.显式的调用setComponentssetComponent当然可以,

2.但有些函数不那么明显,会隐式的覆盖掉已加载的组件,这样更麻烦,比如

CModule::getModule函数,该函数会重新调用模块的初始化函数init(),在初始化的时候,

如果该模块设置了自己的components,那么已注册或加载的组件就会被重新覆盖(比如Gii

模块)。

类似的情况在进行模块和组件依赖关系设计的时候需要注意。


相关内容

热门资讯

重磅消息“微乐捉鸡麻将.有挂吗... 您好:微乐捉鸡麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
【第一资讯】“微信小程序麻将.... 有 亲,根据资深记者爆料微信小程序麻将是可以开挂的,确实有挂(咨询软件无...
终于懂了“海岛互娱.可以开挂吗... 网上科普关于“海岛互娱有没有挂”话题很是火热,小编也是针对海岛互娱作*弊开挂的方法以及开挂对应的知识...
今日重磅消息“熊猫牛牛.究竟有... 您好:熊猫牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
我来教教您“皇豪互娱牛牛.怎么... 我来教教您“皇豪互娱牛牛.怎么装挂?”外卦神器下载您好,皇豪互娱牛牛这个游戏其实有挂的,确实是有挂的...
我来教教您“闽乐茶楼.开挂神器... 我来教教您“闽乐茶楼.开挂神器?”外卦神器下载您好,闽乐茶楼这个游戏其实有挂的,确实是有挂的,需要了...
最新引进“荊州晃晃麻将.怎么装... 最新引进“荊州晃晃麻将.怎么装挂?”确实真的有挂您好,荊州晃晃麻将这个游戏其实有挂的,确实是有挂的,...
贵州一小区自来水变蓝8个月,拆... 封面新闻记者 马嘉豪12月21日,贵州遵义市播州区水务局发布了情况通报,回应近期备受关注的九珑台小区...
玩家分享攻略“花城牌舍.真的有... 网上科普关于“花城牌舍有没有挂”话题很是火热,小编也是针对花城牌舍作*弊开挂的方法以及开挂对应的知识...
今日重磅消息“神殿娱乐.真的有... 今日重磅消息“神殿娱乐.真的有挂吗?”果然有透视挂您好,神殿娱乐这个游戏其实有挂的,确实是有挂的,需...