国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 關于Laravel Service Provider開發設置延遲加載時遇到的問題詳解

關于Laravel Service Provider開發設置延遲加載時遇到的問題詳解

2019-10-26 16:12子呆不呆 PHP教程

這篇文章主要給大家介紹了關于Laravel Service Provider開發設置延遲加載時遇到的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧。

前言

本文主要介紹了關于Laravel Service Provider設置延遲加載時遇到的一些問題,之所有這篇文章,是因實際項目需求,近日在開發 laravel-database-logger 包的時候,發現設置 ServiceProvider defer 屬性設置為 true 時,會導致在 register 方法中注冊的 middleware 無效。

  1. class ServiceProvider extends \Illuminate\Support\ServiceProvider 
  2.  protected $defer = true
  3.  public function register() 
  4.  { 
  5.  $this->mergeConfigFrom( 
  6.   __DIR__ . '/../config/config.php''ibrand.dblogger' 
  7.  ); 
  8.  $this->app->singleton(DbLogger::classfunction ($app) { 
  9.   return new DbLogger(); 
  10.  }); 
  11.  //當 $defer 設置為 true 時,在路由中引用 databaselogger middleware 會報錯,提示 databaselogger class not found. 
  12.  $this->app[\Illuminate\Routing\Router::class]->middleware('databaselogger', Middleware::class); 
  13.  
  14.  } 
  15.  public function provides() 
  16.  { 
  17.  return [DbLogger::class]; 
  18.  } 

當問題出現的時候就懷疑是因為設置了 defer 屬性設置為 true 導致的,立刻就修改源碼把 protected $defer = true; 的代碼注釋掉,結果仍然是提示 databaselogger class not found. ,說明 Laravel 并沒有注冊此 ServiceProvder

接下來就是想如何解決此問題,嘗試了下面的方法:

1. 驗證本身代碼是否存在問題

在正常注冊的 AppServiceProvider 中注冊自己的 ServiceProvider

  1. public function register() 
  2.  { 
  3.  // 
  4.  $this->app->register(\Ibrand\DatabaseLogger\ServiceProvider::class); 
  5.  } 

注冊后結果一切正常。

2. 研究源碼

在 config/app.php 中 providers 注冊無效,但是在其他 ServiceProvider 中注冊有效,說明是其他問題。

通過研究 Illuminate\Foundation\Application 源碼找到 registerConfiguredProviders 方法:

Laravel 是在此方法中去讀取 config/app.php 中的 providers 內容并load到 ProviderRepository 中。

  1. (new ProviderRepository($thisnew Filesystem, $this->getCachedServicesPath())) 
  2.      ->load($providers->collapse()->toArray()); 

重點在 $this->getCachedServicesPath()  ,通過源碼發現 Laravel 是根據 bootstrap/cache/services.php 文件去決定如何注冊 ServiceProvider。

此時想到了為什么之前注釋了 //protected $defer = true; 代碼后仍然無效的原因。

所以為了讓注釋后的 //protected $defer = true; 代碼有效需要執行

  1. php artisan clear-compiled  
  2. php artisan optimize 

之后問題就解決了,也更加深入理解了 ServiceProvider 的原理。

所以切記:如果準備采用延遲加載ServiceProvider時,嚴禁進行注冊 middleware, route 等系列操作。同時,更改 defer 屬性值后,需要執行 php artisan clear-compiled php artisan optimize 以更新 ServiceProvider 緩存。

3. 為什么 AppServiceProvider 中注冊有效?

愿意很簡單,因為 AppServiceProvider 并沒有延遲加載,因此在執行 AppServiceProvider 中 register 方法去注冊新的 ServiceProvider 也是不會延遲加載的。

總結

謹慎使用延遲加載 ServiceProvider

更改 defer 屬性值后,需要執行 php artisan clear-compiled php artisan optimize 以更新 ServiceProvider 緩存。

嚴禁在延遲加載的 ServiceProvider 注冊 middleware 和 route 。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91视频黄色 | 免费观看a级毛片在线播放 成人片免费看 | 国产精品99 | 精品国产乱码久久久久久影片 | 日韩在线免费观看网站 | 欧美精产国品一二三区 | 亚洲精品在线视频 | 久久久精品影院 | 国产欧美日韩在线观看 | 日韩欧美~中文字幕 | 一级做a爰片性色毛片精油 欧美中文字幕在线观看 | 亚洲www视频 | 搞黄视频在线观看 | av片免费看| 在线亚洲不卡 | 波多野结衣先锋影音 | 色香蕉久久 | 精品久久久久久久久久久 | 看欧美一级片 | 国产精品久久久久久久午夜片 | 欧美日韩国产免费 | 国产精品视频一区二区三区 | 综合伊人 | 欧美久久久 | 亚洲国产精品99久久久久久久久 | 国产精品国产三级国产aⅴ中文 | 99中文字幕| 欧美精品一区二区三区在线播放 | 中文字幕一区二区三区乱码在线 | 国产精品激情在线观看 | 中文字幕一区二区在线观看 | av黄色在线 | 国产成人高清 | 国内外成人激情免费视频 | 日韩精品影院 | 日韩欧美国产精品综合嫩v 在线视频 中文字幕 | 国产欧美久久久久久 | 日韩一区二区三区四区 | 91成人在线 | 国产a视频 | 久久麻豆 |