1 在app文件下面創建契約Contracts文件夾php
2 建立契約接口接口文件數組
<?php namespace App\Contracts; interface TestContract { public function callMe($controller); }
3 在app文件下面建立服務文夾Servicesapp
4 建立服務類文件ide
<?php namespace App\Services; use App\Contracts\TestContract; class TestService implements TestContract { public function callMe($controller) { dd('Call Me From TestServiceProvider In '.$controller); } }
5 建立服務提供者,接下來咱們定義一個服務提供者TestServiceProvider用於註冊該類到容器。建立服務提供者能夠使用以下Artisan命令:
php artisan make:provider TestServiceProvider
6 該命令會在app/Providers目錄下生成一個TestServiceProvider.php文件,咱們編輯該文件內容以下:
<?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() { // } /** * 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(); }); //或者使用singleton 單例綁定,註冊別名 $this->app->singleton(TestContract::class, TestService::class); $this->app->alias(TestContract::class, 'test'); } }
7 註冊服務提供者測試
定義完服務提供者類後,接下來咱們須要將該服務提供者註冊到應用中,很簡單,只需將該類追加到配置文件config/app.php
的providers
數組中便可:this
'providers' => [ //其餘服務提供者 App\Providers\TestServiceProvider::class, ],
5 測試服務提供者spa
<?php
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() {
//make調用 // $test = App::make('test'); // $test->callMe('TestController');
$this->test->callMe('TestController');//依賴注入調用 } ...//其餘控制器動做 }