Laravel 事件
编辑于 2023-04-12 21:57:49 阅读 1153
常用命令
#显示系统注册的事件和监听器的列表
php artisan event:list
生成事件和监听器
一、 手动
1、生成单个事件和监听器
php artisan make:event PublishArticlesEvent
php artisan make:listener PublishArticlesListener --event=PublishArticlesEvent
2、手动注册事件和监听器
root@php-fpm:/var/www/laravel-demo# cat app/Providers/EventServiceProvider.php
/**
* 系统中的事件和监听器的对应关系。
*
* @var array
*/
protected $listen = [
PublishArticlesEvent::class => [
PublishArticlesListener::class,
],
];
二、自动
生成 EventServiceProvider
中列出的、尚不存在的任何事件或侦听器
如下,PublishArticlesEvent
和PublishArticlesListener
是不存在的
root@php-fpm:/var/www/laravel-demo# cat app/Providers/EventServiceProvider.php
<?php
namespace App\Providers;
use App\Events\PublishArticlesEvent;
use App\Listeners\PublishArticlesListener;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
PublishArticlesEvent::class => [
PublishArticlesListener::class,
],
];
}
执行
php artisan event:generate
执行成功会自动创建app/Events/PublishArticlesEvent.php
和app/Listeners/PublishArticlesListener.php
然后再修改一下
vi app/Events/PublishArticlesEvent.php
class PublishArticlesEvent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public Article $article;
public function __construct(Article $article)
{
$this->article=$article;
}
}
vi app/Listeners/PublishArticlesListener.php
class PublishArticlesListener
{
public function __construct()
{
//
}
public function handle(PublishArticlesEvent $event)
{
Log::info("article..");
Log::info($event->article);
}
调度事件
即触发事件,在web应用的控制器中,或控制台命令中都可以调用
$article=Article::query()->first();
//调度事件
PublishArticlesEvent::dispatch($article);