基本提供者例子

2018-02-24 15:51 更新

所有的服务提供者都应继承 Illuminate\Support\ServiceProvider 此一类。在这个抽象类中,至少必须定义一个方法: register 。在 register 方法中,应该只绑定服务到服务容器之中。你永远不该试图在 register 方法中注册任何事件监听器、路由或任何其他功能。

Artisan 命令行接口可以很容易地通过 make:provider 产生新的提供者:

php artisan make:provider RiakServiceProvider

注册者方法

现在,让我们来看看基本的服务提供者:

<?php namespace App\Providers;

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

class RiakServiceProvider extends ServiceProvider {

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

}

这个服务提供者只定义了一个 register 方法,并在服务容器中使用此方法定义了一份 Riak\Contracts\Connection 的实现。若你还不了解服务容器是如何运作的,不用担心,我们很快会提到它。

此类位于 App\Providers 命名空间之下,因为这是 Laravel 中默认服务提供者所在的位置。然而,你可以随自己的需要改变它。你的服务提供者可被置于任何 Composer 能自动加载的位置。

启动方法

所以,若我们需要在服务提供者中注册一个事件监听器,该怎么做?它应该在 boot 方法中完成。这个方法会在所有的服务提供者注册后才被调用,这能让你使用框架中其他所有已注册过的服务。

<?php namespace App\Providers;

use Event;
use Illuminate\Support\ServiceProvider;

class EventServiceProvider extends ServiceProvider {

    /**
     * 执行注册后的启动服务。
     *
     * @return void
     */
    public function boot()
    {
        Event::listen('SomeEvent', 'SomeEventHandler');
    }

    /**
     * 在容器中注册绑定。
     *
     * @return void
     */
    public function register()
    {
        //
    }

}

我们可以对 boot 方法中的依赖作类型提示。服务容器会自动注入任何你所需要的依赖:

use Illuminate\Contracts\Events\Dispatcher;

public function boot(Dispatcher $events)
{
    $events->listen('SomeEvent', 'SomeEventHandler');
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号