在laravel包中侦听事件的正确方法是什么?
在包裹服务提供商@GET
中,我有这个
class StudentServiceServiceProvider extends ServiceProvider
我想念什么?
答案 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);
}
}