Laravel 观察者:应用程序生命周期中的沉默忍者

laravel 观察者:应用程序生命周期中的沉默忍者

简介

想象一下,每当您在网站上提交表单时,一个隐形助手就会进来并再次检查所有内容。添加更多详细信息,甚至无需您费力即可发送一封欢迎信。 laravel 观察者就像默默工作的幕后助手。而且它的功能强大,可以在您需要时处理所有任务。在这篇文章中,我们将深入探讨观察者在 laravel 中的工作方式,以及为什么它们是应用程序在模型事件处理中的沉默忍者。以及如何在现实世界的示例中充分利用这些事件。

什么是 laravel 观察者?

laravel 观察者是侦听器类,可通过观察特定事件(例如创建、更新或删除)来帮助管理模型的生命周期。观察者可以为每个事件定义操作。保持您的控制器和模型干净且专注。观察者在您的应用程序中充当“事件专家”。观察者将处理改进代码库所需的后端工作。通过事件驱动的工作分离来提高组织和效率。观察者有助于构建更加模块化和可维护的应用程序结构。

为什么使用观察者?

1。更干净的控制器和模型:观察者处理重复的动作,让您的控制器和模型专注于他们的主要工作而不会分心。

2。代码可重用性:您可以将相关操作整合到一个地方,使您的代码更具可读性和可维护性。

3。错误处理: 每当模型发生变化时,观察者都会自动执行数据验证或后台更新等任务,从而帮助您避免错误。

4。自动事件处理:想要在每次创建或更新记录时触发操作?观察员为您提供支持。

简而言之,观察者非常适合组织您想要在应用程序生命周期的各个阶段执行的逻辑。

eloquent hooks 概述:

– 已检索: 从数据库检索记录后触发。
– 创建: 在创建新记录之前触发。
– created: 成功创建新记录后执行。
– 更新: 在更新现有记录之前激活。
– 更新: 更新记录后触发。
– 保存: 在保存记录之前运行,无论是新创建还是更新。
– 已保存: 保存记录后发生,无论是新创建的还是更新的。
– 删除: 在删除或软删除记录之前启动。
– 已删除: 删除或软删除记录后激活。
– 恢复: 在恢复软删除记录之前触发。
– 已恢复: 在成功恢复软删除记录后运行。

分步指南:如何创建和使用观察者

让我们用一个现实世界的例子来讨论观察者。想象一下,我们正在构建一个博客应用程序,每次用户发布帖子时,我们都希望:

根据标题自动生成 slug。通知管理员。记录发布日期。

以下是我们如何使用 laravel observers 实现这一目标!

第 1 步:创建观察者类
laravel 可以轻松生成观察者类。运行此命令:

php artisan make:observer postobserver --model=post

这将在 app/observers 目录中生成一个 postobserver 类并将其链接到我们的 post 模型。

第 2 步:在观察者中定义事件

打开postobserver类,你会看到一些已经存在的方便的方法。每个方法对应一个模型事件,如创建、更新、删除等。

让我们将自定义逻辑添加到创建事件中,以便它生成一个 slug 并记录发布日期:

use illuminatesupportstr;class postobserver{   public function creating(post $post)   {       $post->slug = str::slug($post->title);       $post->published_at = now();   }   public function created(post $post)   {      notification::send(user::admin(), new postpublishednotification($post));   }}

第 3 步:注册观察者

laravel 提供了两种方法来做到这一点:模型上的 observedby 属性或手动使用observe 方法

1.使用 observedby 属性

如果您使用 laravel 10+,您可以直接在模型上使用 observedby 属性。此属性通过自动将观察者链接到模型来简化观察者注册:

use appobserverspostobserver;use illuminatedatabaseeloquentconcernsobservedby;#[observedby(postobserver::class)]class post extends model{   // your post model code}

这种方法很干净,可以让观察者注册到模型本身,减少设置步骤并保持您的 appserviceprovider 不变。

2.手动注册观察者
如果您愿意(或者正在使用 laravel 10 之前的版本),您可以在 appserviceprovider 的 boot 方法中手动注册 observer:

在appprovidersappserviceprovider.php中,添加observe方法以将观察者链接到模型:

use AppModelsPost;use AppObserversPostObserver;public function boot(){   Post::observe(PostObserver::class);}

注册后,只要 post 模型上发生相应的事件,laravel 就会触发你的 observer 的方法。

第 4 步:测试你的观察者

要查看观察者的实际情况,请尝试在您的应用中创建或更新帖子。 slug 将自动生成,发布日期将自行设置,我们假设的管理员将收到通知。观察者让这一切悄然发生,就像真正的忍者一样。

感谢您的阅读!我希望这能为您的项目激发一些新的想法。如果您有兴趣将高质量的发展变为现实,请随时与我联系——我很乐意与您联系并探索我们如何实现这一目标。

以上就是Laravel 观察者:应用程序生命周期中的沉默忍者的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1249586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 21:30:29
下一篇 2025年12月9日 21:02:41

相关推荐

  • Laravel 应用程序安全

    构建安全的 Laravel 应用程序有时可能感觉像是事后诸葛亮,但 Stephen Rees-Carter 在 Laracon AU 2024 上放弃了一些严肃的知识,这让我重新思考了一些事情。 Stephen 是一位有道德的黑客,他目睹了这一切——我的意思是他侵入了很多 Laravel 应用程序,…

    2025年12月9日
    000
  • 在 Laravel Livewire 中使用多个图像选择

    在本文中,我将向您展示一个简单的想法,当您想使用 livewire 和 laravel 来选择更多图像时,可以修复先前选择的图像丢失的问题。 我知道有多种方法可以实现这一点,但我发现在一些 livewire 生命周期钩子的帮助下这个方法非常简单,这些是 更新和更新的挂钩。 此屏幕截图显示了您的 li…

    2025年12月9日
    000
  • Laravel 显示存储文件夹中的图像示例

    在这篇文章中,我将向您展示如何在 laravel 11 应用程序中显示存储应用公共文件夹中的图像。 laravel 提供了一种安全的方式将图像和文件存储在 storage 文件夹中,防止用户通过 url 直接访问文件。那么,我们如何才能显示存储文件夹中的这些图像呢?下面,我将概述两种可用于安全地显示…

    2025年12月9日
    000
  • Laravel Google Recaptcha 验证教程

    在这篇文章中,我将向您展示 laravel 11 google recaptcha v3 验证教程。 google recaptcha v3 是一个类似验证码的系统,可提供针对黑客和脚本或 curl 请求的安全保护。它确保计算机用户是人类。它是最好和最常用的验证码系统,用户只需单击复选框,并在某些情…

    2025年12月9日
    000
  • Laravel Nightwatch:Laravel 应用程序监控的未来在 Laracon AU 上揭晓

    随着 Laracon AU 发布 Laravel Nightwatch,Laravel 的生态系统不断扩展 – 一个专门为 Laravel 应用程序设计的复杂监控平台。 Nightwatch 将于 2025 年第一季度抢先体验,承诺彻底改变开发者监控和维护 Laravel 应用程序的方式…

    2025年12月9日
    000
  • PHP 初学者:选择开源框架还是自己构建框架?

    PHP 框架选择与自身框架构建 对于希望编写自己的 PHP 框架的初学者来说,学习开源框架是必不可少的。本文将介绍一些流行的 PHP 框架,并提供编写框架的建议。 推荐开源框架 ThinkPHP: 为电商平台量身打造,注重简单、高效。Zend Framework: 企业级框架,功能丰富,适用于大型项…

    2025年12月9日
    000
  • 如何创建 ajax 如何在 laravel 11 中创建依赖 ajax 的下拉菜单

    在本教程中,我将教您如何在 laravel 11 应用程序中创建依赖于 ajax 的下拉菜单。我们将在 laravel 11 中为国家、州和城市选择创建动态依赖下拉菜单。 什么是依赖下拉菜单?从属下拉菜单是一种菜单类型,其中一个下拉菜单中的可用选项取决于另一个下拉菜单中所做的选择。例如,如果您在第一…

    2025年12月9日
    000
  • Laravel 本地化教程

    laravel 11 本地化教程 在本教程中,我将向您展示 laravel 11 本地化教程,如何在 laravel 11 应用程序中使用本地化来实现多语言支持。 什么是 laravel 本地化? laravel 本地化是一项允许您创建多语言网站的功能。它可以帮助您将应用程序的内容翻译成不同的语言。…

    2025年12月9日
    000
  • 如何使用 Laravel 创建 REST API

    您好!在本教程中,我们将在 laravel 中构建一个完整的 rest api 来管理任务。我将指导您完成从设置项目到创建自动化测试的基本步骤。 第 1 步:项目设置 创建一个新的 laravel 项目: composer create-project laravel/laravel task-ap…

    2025年12月9日
    000
  • 如何在 Laravel 教程中使用 Summernote 上传图片

    在这篇文章中,我将向您展示如何在 laravel 11 应用程序中使用 summernote 进行图像上传。 summernote 是一个 wysiwyg(所见即所得)编辑器,允许用户为网页创建富文本编辑器。它是一个基于浏览器的开源编辑器,利用 jquery 框架为用户提供简单、直观的界面来创建、编…

    2025年12月9日
    000
  • 如何在 Laravel 11 中生成应用程序密钥

    让我们探索如何在 laravel 11 中生成应用程序密钥。此密钥对于加密数据和确保 laravel 项目中的安全至关重要。 laravel 在 laravel 中提供了加密的应用程序密钥。每个 laravel 项目都有自己的应用程序密钥。基于应用程序密钥,它们将生成密码、加密数据等。因此,当您获得…

    2025年12月9日
    000
  • 如何在 Laravel 中优雅地引入自定义类?

    如何优雅地引入 laravel 自定义类 在 larvel 中,引入自定义类时重复编辑 composer.json 文件的 classmap 项确实繁琐。对于这一问题,有更优的解决方案。 我们可以在 laravel 的 config/app.php 文件中修改 aliases 数组,添加指向我们自定…

    2025年12月9日
    000
  • Laravel 8.x 中无法获取 HTTP GET 请求参数:如何解决 Nginx 配置问题?

    无法获取 http get 请求参数 在 laravel 8.x 中,通过 http get 请求获取参数时遇到问题?你会发现 $request 中找不到参数,但通过 post 请求却可以访问。 原因: 可能的原因是你的 nginx 配置中未正确设置重定向规则。 解决方案: 检查你的 nginx 配…

    2025年12月9日
    000
  • Laravel 8.x 中,HTTP GET 请求获取不到参数的原因有哪些?

    http get 请求获取不到参数的原因分析 在 laravel 8.x 中发送 http get 请求时,如果无法获取到参数,则可能是以下原因造成的: nginx 配置 检查 nginx 配置中是否正确配置了 rewrite 规则,以将 get 请求的参数重写为 query string,例如: …

    2025年12月9日
    000
  • Laravel 中如何同时查询 uid 和 openid 两列?

    如何使用 Laravel 进行两个条件查询? 想要同时查询 uid 和 openid 列,但是查询结果为空,可能是由于条件写法不正确。 正确写法: User::where(‘uid’, $share)->where(‘openid’, $open…

    2025年12月9日
    000
  • 如何更优雅地在 Laravel 中引入自定义类?

    优化 laravel 自定义类引入方式 正如您所述,通过修改 composer.json 文件并运行 composer dump-autoload 命令可以引入自定义类。然而,这个过程对于经常添加自定义类的开发者来说可能比较繁琐。 那么,有没有更优雅的方式在 laravel 中引入自定义类呢? 答案…

    2025年12月9日
    000
  • Laravel 8.x中,为什么HTTP GET请求获取不到参数?

    http get请求无法获取参数 在laravel 8.x中,通过http get请求获取不到参数,而post请求却可以获取,这可能是由以下原因引起的: nginx 配置问题 检查nginx配置,确保rewrite规则已正确配置。如果rewrite规则配置不当,get请求的参数可能会被忽略。 对于l…

    2025年12月9日
    000
  • 在 Laravel 中,如何进行多条件查询?

    在 laravel 中进行多条件查询的正确写法 在 laravel 中进行多条件查询时,需要使用 where() 方法。但是,你提供的代码存在一些问题。 问题: 你的代码 user::where(‘uid’,$share and ‘openid’,$o…

    2025年12月9日
    000
  • Laravel 8.x 中 GET 请求无法获取参数的原因有哪些?

    http get 请求获取不到参数分析 在 laravel 8.x 中进行 http get 请求时,如果发现无法获取请求参数,而 post 请求却能正常获取,可能会是因为以下原因: nginx 配置问题 检查你的 nginx 配置,确保已经正确配置 rewrite 规则。rewrite 规则的目的…

    2025年12月9日
    000
  • 宝塔设置 Laravel 站点,访问非根目录页面出现 404 错误,如何解决?

    宝塔设置的 laravel 站点访问除根目录以外页面 404 的解决方法 利用 composer 安装 laravel 5.7 后,通过宝塔将项目指向其 public 目录。根目录页面可以正常访问,但访问其他页面时,却会出现 404 错误,且错误页面样式与 laravel 自带的不一致。造成该问题的…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信