久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Yii2中組件的注冊(cè)與創(chuàng)建方法

這篇文章主要介紹了Yii2之組件的注冊(cè)與創(chuàng)建的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

 今天本來打算研究一下yii2.0的AR模型的實(shí)現(xiàn)原理,然而,計(jì)劃趕不上變化,突然就想先研究一下yii2.0的數(shù)據(jù)庫(kù)組件創(chuàng)建的過程。通過對(duì)yii源碼的學(xué)習(xí),了解了yii組件注冊(cè)與創(chuàng)建的過程,并發(fā)現(xiàn)原來yii組件注冊(cè)之后并不是馬上就去創(chuàng)建的,而是待到實(shí)際需要使用某個(gè)組件的時(shí)候再去創(chuàng)建對(duì)應(yīng)的組件實(shí)例的。本文大概記錄一下這個(gè)探索的過程。

  要了解yii組件的注冊(cè)與創(chuàng)建,當(dāng)然要從yii入口文件index.php說起了,整個(gè)文件代碼如下:

<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
 require(__DIR__ . '/../../common/config/main.php'),
 require(__DIR__ . '/../../common/config/main-local.php'),
 require(__DIR__ . '/../config/main.php'),
 require(__DIR__ . '/../config/main-local.php')
);
(new yii\web\Application($config))->run();

可以看到入口文件引入了幾個(gè)配置文件,并將所有配置文件的內(nèi)容都合并到$config這個(gè)配置數(shù)組中,然后使用這個(gè)配置數(shù)組作為參數(shù)去創(chuàng)建一個(gè)應(yīng)用實(shí)例。若將這個(gè)配置數(shù)組打印出來,就會(huì)看到,“components”下標(biāo)對(duì)應(yīng)的元素包含了yii組件的參數(shù)信息(這里只截圖一小部分):

Yii2中組件的注冊(cè)與創(chuàng)建方法

這些組件的信息是在引入進(jìn)來的幾個(gè)配置文件中配置的,Yii組件就是使用這些參數(shù)信息進(jìn)行注冊(cè)與創(chuàng)建的。

  接下來就進(jìn)入yii\web\Application類的實(shí)例化過程了,yii\web\Application類沒有構(gòu)造函數(shù),但是它繼承了\yii\base\Application類:

所以會(huì)自動(dòng)執(zhí)行\(zhòng)yii\base\Application類的構(gòu)造函數(shù):

public function __construct($config = [])
{
 Yii::$app = $this;
 static::setInstance($this);
 $this->state = self::STATE_BEGIN;
 $this->preInit($config);
 $this->registerErrorHandler($config);
 Component::__construct($config);
}

這里要順便說一下預(yù)初始化方法preInit(),它的代碼如下:

public function preInit(&$config)
{
 /* 此處省略對(duì)$config數(shù)組的預(yù)處理操作代碼 */
 // merge core components with custom components
 foreach ($this->coreComponents() as $id => $component) {
  if (!isset($config['components'][$id])) {
   $config['components'][$id] = $component;
  } elseif (is_array($config['components'][$id]) && !isset($config['components'][$id]['class'])) {
   $config['components'][$id]['class'] = $component['class'];
  }
 }
}

  這個(gè)函數(shù)對(duì)傳遞給構(gòu)造函數(shù)的配置數(shù)組$config進(jìn)行了一些預(yù)處理操作(這里省略了),最后使用coreComponents()方法返回的數(shù)組對(duì)$config數(shù)組進(jìn)行了完善,coreComponents()方法是這樣的:

public function coreComponents()
{
 return [
  'log' => ['class' => 'yii\log\Dispatcher'],
  'view' => ['class' => 'yii\web\View'],
  'formatter' => ['class' => 'yii\i18n\Formatter'],
  'i18n' => ['class' => 'yii\i18n\I18N'],
  'mailer' => ['class' => 'yii\swiftmailer\Mailer'],
  'urlManager' => ['class' => 'yii\web\UrlManager'],
  'assetManager' => ['class' => 'yii\web\AssetManager'],
  'security' => ['class' => 'yii\base\Security'],
 ];
}

  其實(shí)就是一些核心組件的配置,也就是說這些組件是可以不需要我們?cè)谂渲梦募信渲玫模瑈ii會(huì)自動(dòng)進(jìn)行注冊(cè)。

  好了,回到\yii\base\Application類的構(gòu)造函數(shù),這個(gè)函數(shù)最后調(diào)用了\yii\base\Component類的構(gòu)造函數(shù),但\yii\base\Component類是沒有構(gòu)造函數(shù)的,不過它繼承了\yii\base\Object類:

所以也自動(dòng)執(zhí)行了\yii\base\Object類的構(gòu)造函數(shù):

public function __construct($config = [])
{
 if (!empty($config)) {
  Yii::configure($this, $config);
 }
 $this->init();
}

這里主要是調(diào)用了\yii\BaseYii類的靜態(tài)方法configure():

public static function configure($object, $properties)
{
 foreach ($properties as $name => $value) {
  $object->$name = $value;
 }
 return $object;
}
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

下面小編就為大家分享一篇PHP+Redis 消息隊(duì)列 實(shí)現(xiàn)高并發(fā)下注冊(cè)人數(shù)統(tǒng)計(jì)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP設(shè)計(jì)模式之注冊(cè)樹模式,結(jié)合實(shí)例形式詳細(xì)分析了注冊(cè)樹模式的概念、原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
下面小編就為大家分享一篇快速解決PHP調(diào)用Word組件DCOM權(quán)限的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
Yii2的rule用于對(duì)模型屬性進(jìn)行驗(yàn)證,scenario用戶定義不同場(chǎng)景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過示例代碼介
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢(shì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
主站蜘蛛池模板: 国产三级午夜理伦三级 | 黄色片中文字幕 | 日韩国产精品视频 | 夜夜嗨av一区二区三区 | 亚洲视频中文字幕 | 色婷婷av一区二区 | 国产精品91在线 | 欧美成人一级片 | 欧美精品乱码99久久蜜桃 | av在线精品| 欧美精品在线播放 | 成人91视频 | 天天干夜夜欢 | 欧美1级片 | 深夜福利视频网站 | av怡红院| 亚洲小说欧美激情另类 | 国模无码大尺度一区二区三区 | 成人激情视频网 | 欧美日韩在线一区二区 | 美女毛片视频 | 九九热精品视频 | 成年人网站在线免费观看 | 国产色站 | 91久久精品日日躁夜夜躁欧美 | 欧美影院一区 | 日韩视频在线免费观看 | 婷婷一区二区三区 | 激情都市亚洲 | 波多野结衣视频一区 | 麻豆成人免费视频 | 免费一区二区三区 | 不卡的av网站| av手机在线观看 | 18成人免费观看网站 | 一区二区三区四区精品 | 婷婷视频在线 | 精品国产乱码一区二区三 | 亚洲乱码在线 | 五月婷婷丁香六月 | 久久精品一区二区三区四区五区 |