laravel5.8 自定義契約和服務着的使用Services

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.phpproviders數組中便可: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');//依賴注入調用 } ...//其餘控制器動做 }
相關文章
相關標籤/搜索