Laravel 服務提供者實例教程 —— 創建 Service Provider 測試實例

      網友投稿 951 2025-03-31

      從某種意義上說,服務提供者有點類似HTTP控制器,HTTP控制器用于為相關路由注冊提供統一管理,而服務提供者用于為相關服務容器提供統一綁定場所,此外服務提供者還可以做一些初始化啟動操作。Laravel的每個核心組件都對應一個服務提供者,可以這么說,服務提供者是Laravel的心臟,是Laravel的核心,核心組件類在這里完成注冊、初始化以供后續調用。

      既然這么重要,那么如何在自己的Laravel應用中定義和使用服務提供者呢?IT視頻資源分享列表IT視頻資源分享列表IT視頻資源分享列表,分享是一種積極的生活態度!!!https://mp.weixin.qq.com/s/HqeXW1T_Ftx7CI1wvMTPfQ

      1、定義服務類

      有了上一節有關服務容器的講述,理解起服務提供者來很簡單。我們這里先定義一個綁定到容器的測試類TestService,為了對類的定義加以約束,我們同時還定義一個契約接口TestContract。

      定義TestContract如下:

      namespace App\Contracts;

      interface TestContract

      {

      public function callMe($controller);

      }

      定義TestService如下:

      namespace App\Services;

      use App\Contracts\TestContract;

      class TestService implements TestContract

      {

      public function callMe($controller)

      {

      dd('Call Me From TestServiceProvider In '.$controller);

      }

      }

      2、創建服務提供者

      接下來我們定義一個服務提供者TestServiceProvider用于注冊該類到容器。創建服務提供者可以使用如下Artisan命令:

      php artisan make:provider TestServiceProvider

      該命令會在app/Providers目錄下生成一個TestServiceProvider.php文件,我們編輯該文件內容如下:

      namespace App\Providers;

      use Illuminate\Support\ServiceProvider;

      use App\Services\TestService;

      class TestServiceProvider extends ServiceProvider

      {

      /**

      * Bootstrap the application services.

      *

      * @return void

      */

      public function boot()

      {

      //

      }

      /**

      Laravel 服務提供者實例教程 —— 創建 Service Provider 測試實例

      * Register the application services.

      *

      * @return void

      * @author LaravelAcademy.org

      */

      public function register()

      {

      //使用singleton綁定單例

      $this->app->singleton('test',function(){

      return new TestService();

      });

      //使用bind綁定實例到接口以便依賴注入

      $this->app->bind('App\Contracts\TestContract',function(){

      return new TestService();

      });

      }

      }

      可以看到我們使用了兩種綁定方法,更多綁定方法參考服務容器文檔。

      3、注冊服務提供者

      定義完服務提供者類后,接下來我們需要將該服務提供者注冊到應用中,很簡單,只需將該類追加到配置文件config/app.php的providers數組中即可:

      'providers' => [

      //其他服務提供者

      App\Providers\TestServiceProvider::class,

      ],

      4、測試服務提供者

      這樣我們就可以在應用中使用該服務提供者了,為了測試該服務提供者我們首先使用Artisan命令創建一個資源控制器TestController:

      php artisan make:controller TestController

      然后在路由配置文件routes.php中定義路由:

      Route::resource('test','TestController');

      最后去TestController中編寫測試代碼:

      namespace App\Http\Controllers;

      use Illuminate\Http\Request;

      use App\Http\Requests;

      use App\Http\Controllers\Controller;

      use App;

      use App\Contracts\TestContract;

      class TestController extends Controller

      {

      //依賴注入

      public function __construct(TestContract $test){

      $this->test = $test;

      }

      /**

      * Display a listing of the resource.

      *

      * @return Response

      * @author LaravelAcademy.org

      */

      public function index()

      {

      // $test = App::make('test');

      // $test->callMe('TestController');

      $this->test->callMe('TestController');

      }

      ...//其他控制器動作

      }

      然后我們去瀏覽器中訪問http://laravel.app:8000/test,分別測試使用App::make和依賴注入解析綁定類調用callMe方法的輸出,結果一樣,都是:

      "Call Me From TestServiceProvider In TestController"

      好了,大功告成,是不是很簡單?!

      此外,Laravel服務提供者還支持延遲加載,具體可參考服務提供者文檔。

      Laravel

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:提取圖中文字圖片提取文字在線)
      下一篇:文檔打字打一個字后面的就消失了的原因與解決方法(文檔打字打一個字后面的消失一個格)
      相關文章
      不卡一卡二卡三亚洲| 国产精品亚洲精品| 国产亚洲福利在线视频| 亚洲精品视频免费在线观看| 亚洲毛片在线观看| 亚洲AV无码一区二区乱孑伦AS| 亚洲欧洲国产精品香蕉网| 亚洲爆乳精品无码一区二区| 亚洲欧美日韩中文字幕一区二区三区| 日韩亚洲国产综合高清| 亚洲丝袜中文字幕| 国产精品亚洲午夜一区二区三区| 国产精品亚洲产品一区二区三区 | 亚洲av麻豆aⅴ无码电影| 色噜噜的亚洲男人的天堂| 国产精品亚洲综合| 亚洲Av无码乱码在线znlu| 一区国严二区亚洲三区| 亚洲精品第一国产综合境外资源 | 无码天堂亚洲国产AV| 国产亚洲精品第一综合| www.亚洲精品.com| 亚洲精品无码激情AV| 亚洲国产天堂久久久久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲午夜无码久久久久小说 | 精品国产日韩久久亚洲| 亚洲日韩国产一区二区三区在线| 日本亚洲免费无线码| 日韩国产精品亚洲а∨天堂免| 激情无码亚洲一区二区三区 | 国产成人亚洲精品蜜芽影院| 亚洲精品无码久久毛片| JLZZJLZZ亚洲乱熟无码| 亚洲色中文字幕无码AV| 亚洲AV区无码字幕中文色| 亚洲美女视频一区二区三区| 亚洲人成777在线播放| 亚洲一线产区二线产区区| www亚洲精品久久久乳| 国产精品亚洲视频|