收听laravel 5.3包中的事件

时间:2018-07-31 02:32:35

标签: php laravel

在laravel包中侦听事件的正确方法是什么?

在包裹服务提供商@GET中,我有这个

class StudentServiceServiceProvider extends ServiceProvider

我想念什么?

4 个答案:

答案 0 :(得分:2)

您需要将StudentServiceServiceProvider添加到config / app.php的providers数组中

'providers' => [

    Pathtoclass\StudentServiceServiceProvider::class

 ]

答案 1 :(得分:1)

您需要专门扩展Illuminate\Foundation\Support\Providers\EventServiceProvider以便考虑到$listen数组。该特定的服务提供商就是检查$listen的功能的来源,而不是通常的Illuminate\Support\ServiceProvider服务提供商。

并且如上所述,请确保您的服务提供商已通过某种方式注册。

答案 2 :(得分:1)

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

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

所以在OP的情况下是:

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        \Illuminate\Support\Facades\Event::listen(
            \Illuminate\Auth\Events\Login::class,
            MyListener::class
        );
    }

答案 3 :(得分:0)

您可以创建一个EventServiceProvicer并在您的主要服务提供商内部注册。

namespace Package\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;


class EventServiceProvider extends ServiceProvider
{

    protected $listen = [...];

    public function boot()
    {
        parent::boot();
    }
}

主要服务提供商

use Package\Providers\EventServiceProvider;

class PackageServiceProvider extends ServiceProvider
{

    public function boot()
    {
        $this->loadRoutesFrom(__DIR__.'/routes/routes.php');
        ...
    }

    public function register(){

        $this->app->register(EventServiceProvider::class);
    }

}