Laravel 事件

编辑于 2023-04-12 13:57:49 阅读 646

常用命令

#显示系统注册的事件和监听器的列表
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 中列出的、尚不存在的任何事件或侦听器

如下,PublishArticlesEventPublishArticlesListener是不存在的

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.phpapp/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);

参考

https://learnku.com/docs/laravel/9.x/events/12228

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验