zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Laravel 事件

事件 laravel
2023-06-13 09:17:39 时间

常用命令

#显示系统注册的事件和监听器的列表
php artisan event:list

生成事件和监听器

一、 手动

生成单个事件和监听器

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);