当前位置:网站首页>Laravel service provider instance tutorial - create a service provider test instance

Laravel service provider instance tutorial - create a service provider test instance

2022-07-07 16:20:00 Full stack programmer webmaster

In a sense , Service providers are somewhat similar HTTP controller ,HTTP The controller is used to provide unified management for related route registration , The service provider is used to provide a unified binding place for related service containers , In addition, the service provider can also do some initialization and startup operations .Laravel Each core component of corresponds to a service provider , You can say that , The service provider is Laravel The heart of the , yes Laravel At the heart of , The core component class is registered here 、 Initialize for subsequent calls .

Since it's so important , So how to be in your own Laravel Define and use service providers in applications ?

1、 Define a service class

With Previous section About the service container , It's easy to understand service providers . Let's define a container bound test class TestService, To constrain the definition of a class , We also define a contract interface TestContract.

Definition TestContract as follows :

<?php

namespace App\Contracts;

interface TestContract
{
    public function callMe($controller);
}

Definition TestService as follows :

<?php

namespace App\Services;

use App\Contracts\TestContract;

class TestService implements TestContract
{
    public function callMe($controller)
    {
        dd('Call Me From TestServiceProvider In '.$controller);
    }
}

2、 Create service provider

Next, we define a service provider TestServiceProvider Used to register this class to the container . To create a service provider, you can use the following Artisan command :

 php artisan make:provider TestServiceProvider 

The order will be in app/Providers Create one in the directory TestServiceProvider.php file , We edit the file as follows :

<?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()
    {
        // Use singleton Binding singleton 
        $this->app->singleton('test',function(){
            return new TestService();
        });

        // Use bind Bind instances to interfaces for dependency injection 
        $this->app->bind('App\Contracts\TestContract',function(){
            return new TestService();
        });
    }
}

You can see that we use two binding methods , More binding method references Service container documentation .

3、 Register service provider

After defining the service provider class , Next, we need to register the service provider into the application , It's simple , Just append this class to the configuration file config/app.php Of providers Array :

'providers' => [

    // Other service providers 

    App\Providers\TestServiceProvider::class,
],

4、 Test service providers

In this way, we can use the service provider in our application , To test the service provider, we first use Artisan Command to create a resource controller TestController

php artisan make:controller TestController

Then in the routing configuration file routes.php Routing is defined in :

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

Last to go TestController Write test code in :

<?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
{
    // Dependency injection 
    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');
    }

    ...// Other controller actions 
}

Then we go to the browser to visit http://laravel.app:8000/test, Test and use respectively App::make And dependency injection to resolve binding class calls callMe Method output , Results the same , All are :

"Call Me From TestServiceProvider In TestController"

Okay , Be accomplished , Is it simple ?!

Besides ,Laravel Service providers also support delayed loading , For details, please refer to Service provider documentation .

Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/113202.html Link to the original text :https://javaforall.cn

原网站

版权声明
本文为[Full stack programmer webmaster]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071406057219.html