惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
B
Blog
V
V2EX
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
博客园 - 聂微东
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
J
Java Code Geeks
H
Help Net Security
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
D
Docker
L
LangChain Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
WordPress大学
WordPress大学
V
Visual Studio Blog

mafeifan 的编程技术分享

mafengwo-mp3-downloader | mafeifan 的编程技术分享 示例页面 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 查看 default namespace 下的 default service account名称 mafeifan 的编程技术分享 检查日志 | mafeifan 的编程技术分享 bridge fdb show dev flannel.1 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享
mafeifan 的编程技术分享
2026-01-16 · via mafeifan 的编程技术分享

Laravel 中的事件系统 ​

执行 php artisan event:generate 会生成事件相关类文件 路径 app/Events/Event.php

所有事件类放在app/Events目录下 所有监听器放在app/Listeners目录下

一个事件可以包含多个监听器

打开 app/Providers/EventServiceProvider.php

php

    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\SomeEvent' => [
            'App\Listeners\EventListener',
        ],
    ];

项目中的运用 ​

打开 app/Providers/EventServiceProvider.php 更新

php

    protected $listen = [
        'App\Events\SkuEvents\SkuCreated' => [
            'App\Listeners\SkuListeners\RiotVerifySkuCreatedPusher',
        ],
    ]

执行 php artisan event:generate 命令后就可以得到SkuCreated文件了

app/Events/SkuEvents/SkuCreated.php

php

<?php

namespace App\Events\SkuEvents;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Queue\SerializesModels;
use Riot\Sku\Models\Sku;

class SkuCreated
{
    use InteractsWithSockets, SerializesModels;

    public $sku = null;

    /**
     * Create a new event instance.
     *
     * SkuUpdated constructor.
     * @param Sku $sku
     * @param string $type
     */
    public function __construct(Sku $sku, string $type = '')
    {
        $this->sku = $sku;
    }

}

我们在Controller中尝试触发事件, 即当往Sku表添加一条新记录时触发SkuCreated事件

Riot/Sku/Controllers/SkuController.php

php

    public function store(CreateSkuRequest $request)
    {
        try {
            $input = $request->all();
            
            $sku = $this->repository->create($input);

            // 事件触发
            event(new SkuCreated($sku));

            return $this->sendResponse($sku, 'Sku saved successfully.');
        } catch (\Exception $e)
        {
            return $this->sendError($e->getMessage());
        }
    }

Listener 具体逻辑 主要是同步SKU信息

php

<?php

namespace App\Listeners\SkuListeners;

use App\Events\SkuEvents\SkuCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Events\SkuEvents\SkuUpdated as SkuUpdatedEvent;
use Riot\Sku\Jobs\PushCreatedSkuInfo;

class RiotVerifySkuCreatedPusher
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param SkuCreated $event
     * @return void
     */
    public function handle(SkuCreated $event)
    {
        $sku = $event->sku;

        dd($sku);
    }
}

当然为了方便,可以在路由中测试

php

Route:get('/', function() {
    $sku = \App\Sku::find(1);
    event(new \App\Events\SkuEvents\SkuCreated($sku));
});

参考 ​

https://www.cnblogs.com/sgm4231/p/9820794.html