Laravel模型事件的示例分析

  介绍

这篇文章主要介绍Laravel模型事件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Laravel模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除。Laravel模型事件文档概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨是事件与监听器的构建与设置,并额外补充一些细节的说明。

<强>事件概述

雄辩有很多事件可以让你使用钩子将它们关联起来,并且增加自定义的功能到你的模型中。该模型起始时有以下事件:

检索创建

创建更新

更新保存

删除保存

删除恢复

恢复从文档这里我们可以了解它们都是如何实现的,你还可以进入模型的基类去看看它们到底是如何实现的:

当现有模型被数据库检索时,检索事件将会触发。当一个新的模型被第一次保存时,创建和创建事件将会触发。如果对一个已经存在于数据库的模型调用保存方法,更新/更新事件将会触发。无论怎样,在这两种情况下,储蓄/保存事件都会触发。

文档中对模型事件进行了很好的概述,同时解释了怎样使用钩子去关联事件,但是如果你是初学者,或者并不是熟悉怎样使用钩子将事件监听器与这些自定义模型事件相关联,请进一步阅读本文。

<强>注册事件

为了在你的模型中关联一个事件,你需要做的第一件事是使用美元dispatchesEvents属性去注册事件对象,这最终将通过,HasEvents: fireCustomModelEvent()方法触发,该方法将通过,fireModelEvent()方法被调用。fireCustomModelEvent()方法原始的时候大致是下面这样:

/* *   ,*为给定的事件触发一个自定义模型。   ,*   ,* @param , string 美元事件   ,* @param  string 美元,方法   ,* @return 混合| null   ,*/protected  function  fireCustomModelEvent(事件,美元,美元的方法)   {   ,,,if (!,收取($ this→dispatchesEvents[$事件])),{   ,,,,,,,返回;   ,,,}   ,,,result 美元;=,静态:调度员→美元美元方法(new  $ this→dispatchesEvents事件美元($));   ,,,if  (!, is_null(结果)美元),{   ,,,,,,,return 结果美元;   ,,,}   }

一些事件,比如删除,将进行检测判断是否这个事件会返回假然后退出操作,比如,你可以使用这个钩子去做一些检测,也可以防止一个用户被创建或删除。

使用,App \用户模型举例,这里展示了如何配置你的模型事件:

protected  dispatchesEvents 美元;=,(   ,,,& # 39;储蓄# 39;,=祝辞,事件\ App \ \ UserSaving::类,   ];

你可以使用工匠:事件命令来为你创建这个事件,但基本上这将是你最后得到结果:

& lt; php ?   namespace 应用\事件;   use 应用\用户;   use 照亮\ \ SerializesModels队列;   class  UserSaving   {   ,,,use  SerializesModels;   ,,,public  $用户;   ,,,/* *   ,,,,*,,创建一个新的事件实例   ,,,,   ,,,,*,@param  \ App \ User  $用户   ,,,*/,,,public  function  __construct (User  $用户)   ,,,{   ,,,,,,,这个→美元user =, $用户;   ,,,}   }

我们的事件提供了一个公有美元的用户属性以便你能够在储蓄事件期间访问用户模型实例。

为了让它工作起来下一步需要做的是为这个事件建立一个实际的监听器。我们设置好模型的触发时机,当用户模型触发储蓄事件,监听器就会被调。

<强>创建一个事件监听器

现在,我们定义用户模型并注册一个事件监听器来监听储蓄事件的触发。虽然,我能通过模型观察器快速实现,但是,我想引导你为单个事件触发配置事件监听器。

事件监听器就像Laravel其它事件监听一样,处理()方法将接收应用\ \ UserSaving事件事件类的一个实例。

你可以手动创建它,也可以使用php工匠:侦听器命令。不管怎么样,你都将创建一个像下面这样子监听类:

& lt; php ?   namespace 应用\听众;   use 应用\ \ UserSaving 事件;as  UserSavingEvent;   class  UserSaving   {   ,,,/* *   ,,,,*,处理事件。   ,,,,   ,,,,*,@param , \ App \ \ UserSavingEvent 事件;事件美元   ,,,,*,@return 混合   ,,,*/,,,public  function 处理(UserSavingEvent 事件美元)   ,,,{   ,,,,,,,的应用(& # 39;日志# 39;)→信息(事件→美元用户);   ,,,}   }

Laravel模型事件的示例分析