laravel学习笔记之模型事件的几种用法示例


Posted in PHP onAugust 15, 2017

前言

本文主要给大家介绍了关于laravel模型事件用法的相关内容,文中通过示例代码介绍了laravel模型事件的多种用法,下面话不多说了,来一起看看详细的介绍吧。

用法示例

一 、简单粗鲁(用于本地测试)

路由中定义:

Event::listen('eloquent.updated: App\Post',function (){
 dump('测试一下修改事件');
});
Route::post('/post/{id}', 'PostController@update');

二 、生成事件和监听器

在 EventServiceProvider 定义对应关系

protected $listen = [
  'App\Events\PostEvent' => [
    'App\Listeners\PostListener',
   ],
 ];
php artisan event:generate //生成文件

event 中注入要操作的类

listen 中handle 方法注入对应事件类

public function handle(PostEvent $event)
 {
  dump('测试一下修改事件');
 }

最后在 post 模型中添加 'events' 属性

protected $events = [
   'updated' => PostListener::class
 ];

三 、利用框架的 boot 方法

直接在相关 Model 中定义

public static function boot() {
  parent::boot();
  
  static::updated(function($model) {
   dump('测试一下修改事件');
  });
 }

四 、定义Trait

如果想对多个模型的updated 或 created 事件进行一些操作,该不会每个模型都单独写一个吧.例如: 日志 .

trait LogRecord
{
 //注意,必须以 boot 开头
 public static function bootLogRecord()
 {
  foreach(static::getModelEvents() as $event) {
   static::$event(function ($model){
    $model->setRemind();
   });
  }
 }


 public static function getModelEvents()
 {
  if(isset(static::$recordEvents)){
   return static::$recordEvents;
  }
  return ['updated'];
 }

 public function setRemind()
 {
  dump('记录逻辑操作');
 }
}

然后,在模型中use trait 就可以了.

      • creating - 对象已经 ready 但未写入数据库

      • created - 对象已经写入数据库

      • updating - 对象已经修改但未写入数据库

      • updated - 修改已经写入数据库

      • saving - 对象创建或者已更新但未写入数据库

      • saved - 对象创建或者更新已经写入数据库

      • deleting - 删除前

      • deleted - 删除后

      • restoring - 恢复软删除前

      • restored - 恢复软删除后

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php下使用以下代码连接并测试
Apr 09 PHP
php adodb介绍
Mar 19 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
php获取QQ头像并显示的方法
Dec 23 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
一段实用的php验证码函数
May 19 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
php文件上传类的分享
Jul 06 PHP
php源码的使用方法讲解
Sep 26 PHP
PHP实现的回溯算法示例
Aug 15 #PHP
php简单中奖算法(实例)
Aug 15 #PHP
PHP实现的随机红包算法示例
Aug 14 #PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 #PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 #PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 #PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 #PHP
You might like
根德YB400的电路分析
2021/03/02 无线电
用PHP代码给图片加水印
2015/07/01 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
广告显示判断
2006/08/31 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
python转换摩斯密码示例
2014/02/16 Python
Python编写屏幕截图程序方法
2015/02/18 Python
python语言中with as的用法使用详解
2018/02/23 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python 如何对logging日志封装
2020/12/02 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
项目投资意向书
2014/04/01 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
美术教师个人工作总结
2015/02/06 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
话题作文之生命的旋律
2019/12/17 职场文书