gpt4 book ai didi

php - Laravel 模型事件 - 我对它们的去向有些困惑

转载 作者:IT王子 更新时间:2023-10-29 00:42:05 26 4
gpt4 key购买 nike

所以我认为一个好的 Laravel 应用程序应该是非常模型和事件驱动的。

我有一个名为 Article 的模型。我希望在发生以下事件时发送电子邮件提醒:

  • 创建文章时
  • 文章更新时
  • 当文章被删除时

The docs假设我可以使用模型事件并在 App\Providers\EventServiceProviderboot() 函数中注册它们。

但这让我感到困惑,因为...

  • 当我添加更多模型(如 CommentAuthor)时会发生什么,这些模型需要完整的所有模型事件集? EventServiceProvider 的单个 boot() 函数会不会非常庞大​​?
  • Laravel's 'other' Events 的目的是什么? ?如果实际上我的事件只会响应模型 CRUD 操作,为什么我需要使用它们?

我是 Laravel 的初学者,来自 CodeIgniter,所以我试图围绕正确的 Laravel 做事方式进行思考。感谢您的建议!

最佳答案

在您的情况下,您还可以使用以下方法:

// Put this code in your Article Model

public static function boot() {

parent::boot();

static::created(function($article) {
Event::fire('article.created', $article);
});

static::updated(function($article) {
Event::fire('article.updated', $article);
});

static::deleted(function($article) {
Event::fire('article.deleted', $article);
});
}

另外,你需要在App\Providers\EventServiceProvider中注册监听器:

protected $listen = [
'article.created' => [
'App\Handlers\Events\ArticleEvents@articleCreated',
],
'article.updated' => [
'App\Handlers\Events\ArticleEvents@articleUpdated',
],
'article.deleted' => [
'App\Handlers\Events\ArticleEvents@articleDeleted',
],
];

还要确保您已在 App\Handlers\Events 文件夹/目录中创建处理程序来处理该事件。例如,article.created 处理程序可能是这样的:

<?php namespace App\Handlers\Events;

use App\Article;
use App\Services\Email\Mailer; // This one I use to email as a service class

class ArticleEvents {

protected $mailer = null;

public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}

public function articleCreated(Article $article)
{
// Implement mailer or use laravel mailer directly
$this->mailer->notifyArticleCreated($article);
}

// Other Handlers/Methods...
}

关于php - Laravel 模型事件 - 我对它们的去向有些困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30332117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com