BlogArticleObserver.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace App\Observers;
  3. use App\Handlers\SlugTranslateHandler;
  4. use App\Jobs\TranslateSlug;
  5. use App\Models\BlogArticle;
  6. // creating, created, updating, updated, saving,
  7. // saved, deleting, deleted, restoring, restored
  8. class BlogArticleObserver
  9. {
  10. public function created(BlogArticle $article)
  11. {
  12. $article->category->updatePostCount();
  13. }
  14. public function saving(BlogArticle $article)
  15. {
  16. // 生成话题摘录
  17. $article->excerpt = make_excerpt($article->body);
  18. }
  19. public function saved(BlogArticle $article)
  20. {
  21. // 如 slug 字段无内容,即使用翻译器对 title 进行翻译
  22. if ( ! $article->slug) {
  23. // 翻译器对 title 进行翻译
  24. // $article->slug = app(SlugTranslateHandler::class)->translate($article->title);
  25. // 推送任务到队列
  26. dispatch(new TranslateSlug($article));
  27. }
  28. }
  29. // 连带删除文章下的评论
  30. public function deleted(BlogArticle $article)
  31. {
  32. $article->category->updatePostCount();
  33. // 数据库操作需避免再次触发 Eloquent 事件,以免造成联动逻辑冲突。所以这里我们使用了 DB 类进行操作
  34. \DB::table('blog_replies')->where('article_id', $article->id)->delete();
  35. }
  36. }