Laravel 事件

2023-03-24 15:14:41 浏览数 (1)

常用命令

代码语言:javascript复制
#显示系统注册的事件和监听器的列表
php artisan event:list

生成事件和监听器

一、 手动

生成单个事件和监听器

代码语言:javascript复制
php artisan make:event PublishArticlesEvent

php artisan make:listener PublishArticlesListener --event=PublishArticlesEvent

代码语言:javascript复制
2.手动注册注册事件和监听器

root@php-fpm:/var/www/laravel-demo# cat app/Providers/EventServiceProvider.php /**

系统中的事件和监听器的对应关系。

@var array */ protected $listen = [ PublishArticlesEvent::class => [ PublishArticlesListener::class, ], ];

代码语言:javascript复制

二、自动

生成 EventServiceProvider 中列出的、尚不存在的任何事件或侦听器

如下,PublishArticlesEventPublishArticlesListener是不存在的

代码语言:javascript复制
root@php-fpm:/var/www/laravel-demo# cat app/Providers/EventServiceProvider.php 

<?php
namespace AppProviders;

use AppEventsPublishArticlesEvent;
use AppListenersPublishArticlesListener;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        PublishArticlesEvent::class => [
            PublishArticlesListener::class,
        ],
    ];
}

执行

代码语言:javascript复制
php artisan event:generate

执行成功会自动创建app/Events/PublishArticlesEvent.phpapp/Listeners/PublishArticlesListener.php

然后再修改一下

代码语言:javascript复制
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应用的控制器中,或控制台命令中都可以调用

代码语言:javascript复制
$article=Article::query()->first();
//调度事件
PublishArticlesEvent::dispatch($article);

0 人点赞