基本提供者例子

2018-02-24 15:51 更新

所有的服務(wù)提供者都應(yīng)繼承 Illuminate\Support\ServiceProvider 此一類。在這個(gè)抽象類中,至少必須定義一個(gè)方法: register 。在 register 方法中,應(yīng)該只綁定服務(wù)到服務(wù)容器之中。你永遠(yuǎn)不該試圖在 register 方法中注冊(cè)任何事件監(jiān)聽(tīng)器、路由或任何其他功能。

Artisan 命令行接口可以很容易地通過(guò) make:provider 產(chǎn)生新的提供者:

php artisan make:provider RiakServiceProvider

注冊(cè)者方法

現(xiàn)在,讓我們來(lái)看看基本的服務(wù)提供者:

<?php namespace App\Providers;

use Riak\Connection;
use Illuminate\Support\ServiceProvider;

class RiakServiceProvider extends ServiceProvider {

    /**
     * 在容器中注冊(cè)綁定。
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('Riak\Contracts\Connection', function($app)
        {
            return new Connection($app['config']['riak']);
        });
    }

}

這個(gè)服務(wù)提供者只定義了一個(gè) register 方法,并在服務(wù)容器中使用此方法定義了一份 Riak\Contracts\Connection 的實(shí)現(xiàn)。若你還不了解服務(wù)容器是如何運(yùn)作的,不用擔(dān)心,我們很快會(huì)提到它。

此類位于 App\Providers 命名空間之下,因?yàn)檫@是 Laravel 中默認(rèn)服務(wù)提供者所在的位置。然而,你可以隨自己的需要改變它。你的服務(wù)提供者可被置于任何 Composer 能自動(dòng)加載的位置。

啟動(dòng)方法

所以,若我們需要在服務(wù)提供者中注冊(cè)一個(gè)事件監(jiān)聽(tīng)器,該怎么做?它應(yīng)該在 boot 方法中完成。這個(gè)方法會(huì)在所有的服務(wù)提供者注冊(cè)后才被調(diào)用,這能讓你使用框架中其他所有已注冊(cè)過(guò)的服務(wù)。

<?php namespace App\Providers;

use Event;
use Illuminate\Support\ServiceProvider;

class EventServiceProvider extends ServiceProvider {

    /**
     * 執(zhí)行注冊(cè)后的啟動(dòng)服務(wù)。
     *
     * @return void
     */
    public function boot()
    {
        Event::listen('SomeEvent', 'SomeEventHandler');
    }

    /**
     * 在容器中注冊(cè)綁定。
     *
     * @return void
     */
    public function register()
    {
        //
    }

}

我們可以對(duì) boot 方法中的依賴作類型提示。服務(wù)容器會(huì)自動(dòng)注入任何你所需要的依賴:

use Illuminate\Contracts\Events\Dispatcher;

public function boot(Dispatcher $events)
{
    $events->listen('SomeEvent', 'SomeEventHandler');
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)