Laravel观察者模式如何使用_Laravel Model Observer配置

发布时间 - 2025-12-03 00:00:00    点击率:
Laravel观察者用于监听模型生命周期事件,通过创建Observer类并注册到模型,可将创建、更新、删除等事件的处理逻辑解耦,保持代码清晰。使用artisan命令生成观察者,在AppServiceProvider中注册,支持created、updated、deleted等方法,适用于发送邮件、记录日志、清理缓存等场景。

在 Laravel 中,观察者模式(Observer)是一种优雅的方式来监听模型的生命周期事件,比如创建、更新、删除等。通过使用观察者,你可以将与模型状态变化相关的额外逻辑从控制器或模型中剥离出来,保持代码整洁和可维护。

什么是 Laravel 观察者?

Laravel 模型观察者允许你定义一个类,该类监听特定模型的多个生命周期钩子(如 creatingcreatedupdatingupdated 等)。当这些事件触发时,观察者中的对应方法就会自动执行。

如何创建并注册观察者?

以下是配置 Laravel 观察者的完整步骤:

1. 创建观察者类

使用 Artisan 命令生成观察者:

php artisan make:observer UserObserver --model=User

这会在 app/Observers 目录下创建 UserObserver.php 文件,并绑定到 User 模型。

2. 编写观察者逻辑

打开生成的观察者文件,添加你需要响应的事件方法:

namespace App\Observers;

use App\Models\User;

class UserObserver
{
    public function created(User $user)
    {
        // 用户创建后发送欢迎邮件
        \Mail::to($user->email)->send(new WelcomeEmail());
    }

    public function updating(User $user)
    {
        // 在更新前记录旧数据
        $user->old_name = $user->getOriginal('name');
    }

    public function updated(User $user)
    {
        // 更新后写入日志
        \Log::info("用户 {$user->id} 已更新");
    }

    public function deleted(User $user)
    {
        // 软删除或硬删除时清理关联数据
        $user->posts()->delete();
    }
}

3. 注册观察者

有多种方式可以注册观察者,推荐在 AppServiceProvider 中注册:

编辑 app/Providers/AppServiceProvider.php

use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        User::observe(UserObserver::class);
    }
}

一旦注册,所有 User 模型的生命周期事件都会通知该观察者。

支持的观察者方法

观察者可以监听以下模型事件方法:

  • retrieved:获取模型时
  • creating / created
  • updating / updated
  • saving / saved
  • deleting / deleted
  • restoring / restored(软删除恢复)

注意:如果在 creatingupdating 中返回 false,会取消保存操作。

实际应用场景建议

  • 发送注册成功邮件(created
  • 清理缓存(updateddeleted
  • 记录操作日志或审计跟踪
  • 同步数据到搜索服务(如 Algolia、Elasticsearch)
  • 处理软删除关联资源

基本上就这些。观察者让模型事件处理更清晰,避免把业务逻辑塞进模型或控制器。只要记得及时注册,就能顺利运行。


# laravel  # php  # go  # app  # ai  # red  # 事件  # elasticsearch  # 就会  # 是一种  # 你可以  # 就能  # 多个  # 适用于  # 可将  # 将与  # 这会  # 绑定 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何用AI帮你把自己的生活经历写成一个有趣的故事?  个人摄影网站制作流程,摄影爱好者都去什么网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  浅谈Javascript中的Label语句  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  手机网站制作与建设方案,手机网站如何建设?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何在自有机房高效搭建专业网站?  详解MySQL数据库的安装与密码配置  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何正确选择百度移动适配建站域名?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何注册花生壳免费域名并搭建个人网站?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何在企业微信快速生成手机电脑官网?  北京网站制作公司哪家好一点,北京租房网站有哪些?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  如何快速搭建高效WAP手机网站?  Android仿QQ列表左滑删除操作  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  零基础网站服务器架设实战:轻量应用与域名解析配置指南  清除minerd进程的简单方法  原生JS实现图片轮播切换效果  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  android nfc常用标签读取总结  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Swift中循环语句中的转移语句 break 和 continue  Laravel怎么实现模型属性的自动加密  如何在IIS7中新建站点?详细步骤解析  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  千库网官网入口推荐 千库网设计创意平台入口  如何在阿里云香港服务器快速搭建网站?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  网站页面设计需要考虑到这些问题  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出