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

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

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

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

  要了解yii組件的注冊與創(chuàng)建,當然要從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這個配置數(shù)組中,然后使用這個配置數(shù)組作為參數(shù)去創(chuàng)建一個應用實例。若將這個配置數(shù)組打印出來,就會看到,“components”下標對應的元素包含了yii組件的參數(shù)信息(這里只截圖一小部分):

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

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

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

所以會自動執(zhí)行\(zhòng)yii\base\Application類的構造函數(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);
}

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

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

  這個函數(shù)對傳遞給構造函數(shù)的配置數(shù)組$config進行了一些預處理操作(這里省略了),最后使用coreComponents()方法返回的數(shù)組對$config數(shù)組進行了完善,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類的構造函數(shù),這個函數(shù)最后調用了\yii\base\Component類的構造函數(shù),但\yii\base\Component類是沒有構造函數(shù)的,不過它繼承了\yii\base\Object類:

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

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

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

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

相關文檔推薦

下面小編就為大家分享一篇PHP+Redis 消息隊列 實現(xiàn)高并發(fā)下注冊人數(shù)統(tǒng)計的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP設計模式之注冊樹模式,結合實例形式詳細分析了注冊樹模式的概念、原理、實現(xiàn)方法與相關注意事項,需要的朋友可以參考下
下面小編就為大家分享一篇快速解決PHP調用Word組件DCOM權限的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
Yii2的rule用于對模型屬性進行驗證,scenario用戶定義不同場景下需要驗證的模型,下面這篇文章主要給大家介紹了關于Yii2中場景(scenario)和驗證規(guī)則(rule)的相關資料,文中通過示例代碼介
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
主站蜘蛛池模板: 九九99精品| 成人在线视频一区二区三区 | 日韩在线精品视频 | 日韩在线中文字幕 | 久久久.com| 亚洲精品中文在线观看 | 欧美一区二区在线播放 | 在线三级网址 | 国产传媒视频在线观看 | 精品久久成人 | 日本精品裸体写真集在线观看 | 精品国产青草久久久久96 | 欧洲免费毛片 | 欧美综合久久久 | 国产精品国产a | 日本视频在线播放 | 99热在这里只有精品 | 亚州精品天堂中文字幕 | 免费看黄色小视频 | www国产成人免费观看视频 | 亚洲视频免费观看 | 九九伊人sl水蜜桃色推荐 | 羞羞视频在线网站观看 | 国产区在线 | 91精品亚洲 | 五月激情久久 | 天堂久 | 精品久久久久国产 | 亚洲激情在线视频 | 国产精品久久久久久久久久久免费看 | 亚洲欧美国产毛片在线 | 国产精品久久久久久久久 | 国产农村一级国产农村 | 国产专区在线 | 亚洲精品毛片av | 亚洲三级免费看 | 日韩中文一区二区三区 | 久久精品99 | 新超碰97 | 国产色99精品9i| 欧美成年人视频在线观看 |