注册模块事件
注册模块事件#
模块可以包含事件和事件监听器。你可以手动创建这些类,或者使用以下辅助方法:
php artisan module:make-event BlogPostWasUpdated Blog
php artisan module:make-listener NotifyAdminOfNewPost Blog
一旦创建了它们,你需要在 laravel 中注册它们。这可以通过两种方式实现:
- 手动调用
$this->app['events']->listen(BlogPostWasUpdated::class, NotifyAdminOfNewPost::class);
在你的模块服务提供者中 - 或者通过为你的模块创建一个包含所有事件的事件服务提供者,类似于
app/
命名空间下的EventServiceProvider
。
创建一个 EventServiceProvider#
一旦你有多个事件,你可能会发现将所有事件及其监听器放在一个专用的服务提供者中会更容易。这就是 EventServiceProvider 的作用。
在 Modules/Blog/Providers
文件夹 (以 Blog 为例) 创建一个名为 EventServiceProvider
的新类。
这个类看起来应该像这样:
<?php
namespace Modules\Blog\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [];
}
不要忘记加载这个服务提供者,例如将其添加到模块中的 composer.json 文件。
这就像 app/
命名空间中的常规 EventServiceProvider。在我们的例子中,listen
属性看起来像这样:
// ...
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
BlogPostWasUpdated::class => [
NotifyAdminOfNewPost::class,
],
];
}
推荐文章: