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

Yii2中組件的注冊與創建方法

這篇文章主要介紹了Yii2之組件的注冊與創建的實現方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

 今天本來打算研究一下yii2.0的AR模型的實現原理,然而,計劃趕不上變化,突然就想先研究一下yii2.0的數據庫組件創建的過程。通過對yii源碼的學習,了解了yii組件注冊與創建的過程,并發現原來yii組件注冊之后并不是馬上就去創建的,而是待到實際需要使用某個組件的時候再去創建對應的組件實例的。本文大概記錄一下這個探索的過程。

  要了解yii組件的注冊與創建,當然要從yii入口文件index.php說起了,整個文件代碼如下:

<?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();

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

Yii2中組件的注冊與創建方法

這些組件的信息是在引入進來的幾個配置文件中配置的,Yii組件就是使用這些參數信息進行注冊與創建的。

  接下來就進入yii\web\Application類的實例化過程了,yii\web\Application類沒有構造函數,但是它繼承了\yii\base\Application類:

所以會自動執行\yii\base\Application類的構造函數:

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

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

public function preInit(&$config)
{
 /* 此處省略對$config數組的預處理操作代碼 */
 // 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'];
  }
 }
}

  這個函數對傳遞給構造函數的配置數組$config進行了一些預處理操作(這里省略了),最后使用coreComponents()方法返回的數組對$config數組進行了完善,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'],
 ];
}

  其實就是一些核心組件的配置,也就是說這些組件是可以不需要我們在配置文件中配置的,yii會自動進行注冊。

  好了,回到\yii\base\Application類的構造函數,這個函數最后調用了\yii\base\Component類的構造函數,但\yii\base\Component類是沒有構造函數的,不過它繼承了\yii\base\Object類:

所以也自動執行了\yii\base\Object類的構造函數:

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

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

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

相關文檔推薦

下面小編就為大家分享一篇PHP+Redis 消息隊列 實現高并發下注冊人數統計的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP設計模式之注冊樹模式,結合實例形式詳細分析了注冊樹模式的概念、原理、實現方法與相關注意事項,需要的朋友可以參考下
下面小編就為大家分享一篇快速解決PHP調用Word組件DCOM權限的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
Yii2的rule用于對模型屬性進行驗證,scenario用戶定義不同場景下需要驗證的模型,下面這篇文章主要給大家介紹了關于Yii2中場景(scenario)和驗證規則(rule)的相關資料,文中通過示例代碼介
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實現方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
主站蜘蛛池模板: 日本三级线观看 视频 | 91精品国产综合久久久久蜜臀 | 91国产精品 | 日日操操 | 日本在线你懂的 | 国产精品3区 | 欧美一区二不卡视频 | 毛片久久久| 一区二区视频在线观看 | 久亚州在线播放 | 精品视频导航 | 免费视频一区二区三区在线观看 | 中文在线a在线 | 久日精品| 精品美女视频在线观看免费软件 | 农村妇女毛片精品久久久 | 亚洲成人中文字幕 | 祝你幸福电影在线观看 | 久久极品 | 人妖一区 | 中文字幕免费视频 | 亚洲一区二区三区在线 | 成人精品福利 | 五月天婷婷激情 | 久久精品国产一区二区电影 | 天天干夜夜操 | 日韩在线国产精品 | 亚洲精品国产区 | 成年精品 | 伊人一二三| 久草久草久草 | 日韩精品在线免费 | 亚洲最新在线视频 | 福利一区二区 | 婷婷综合久久 | 国产一区二区精品在线观看 | 亚洲精品天堂 | 天天射网站 | 亚洲国产精品第一区二区 | 久久亚洲一区二区三 | 欧美理论片在线观看 |