W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
所有的服務(wù)提供者都應(yīng)繼承 Illuminate\Support\ServiceProvider 此一類。在這個(gè)抽象類中,至少必須定義一個(gè)方法: register 。在 register 方法中,應(yīng)該只綁定服務(wù)到服務(wù)容器之中。你永遠(yuǎn)不該試圖在 register 方法中注冊(cè)任何事件監(jiān)聽器、路由或任何其他功能。
Artisan 命令行接口可以很容易地通過(guò) make:provider 產(chǎn)生新的提供者:
php artisan make:provider RiakServiceProvider
現(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)加載的位置。
所以,若我們需要在服務(wù)提供者中注冊(cè)一個(gè)事件監(jiān)聽器,該怎么做?它應(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');
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: