Laravel 5.2 ServiceProvider在自己的包中覆盖$ listen数组

时间:2016-07-12 17:59:25

标签: laravel-5 laravel-5.2 service-provider

编写$ listen映射的正确方法是什么? - 我在该软件包中创建了一个包和一个ServiceProvider文件。

我的问题是我不知道如何访问包的类路径,这是我试过的代码:

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
  'damjan\random\ActionDone' => [
  'damjan\random\ThingToDoAfterEventWasFired',
  ],
];

我是否在错误的方案中设置了Listener和Event类的类路径??

2 个答案:

答案 0 :(得分:0)

一周前有同样的问题。今天发现如何解决。我不知道是否可以覆盖数组,但您可以使用与Laravel 5.2事件服务提供程序相同的代码向您的程序包添加第二个服务提供程序。

可以在此处找到代码:https://github.com/laravel/laravel/blob/master/app/Providers/EventServiceProvider.php

然后,您可以使用以下代码在您的包服务提供商中为此服务提供商提供服务:

/**
 * Register the service provider.
 *
 * @return void
 */
public function register()
{
    $this->app->register(PackageEventServiceProvider::class);
}

答案 1 :(得分:0)

$listen映射仅用于在App\Providers\EventServiceProvider内部而不是包的ServiceProvider内部的应用程序级别注册侦听器。

我认为,从包的ServiceProvier中注册事件侦听器的正确方法是简单地在其Event函数中使用boot门面。

所以在OP的情况下是:

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        \Illuminate\Support\Facades\Event::listen(
            'damjan\random\ActionDone',
            'damjan\random\ThingToDoAfterEventWasFired'
        );
    }