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 相关文章推荐
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
php通过文件头判断格式的方法
May 28 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
php post换行的方法
Feb 03 PHP
如何在PHP中使用数组
Jun 09 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
PHP经典面试题集锦
2015/03/19 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
JavaScript使用cookie
2007/02/02 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
利用ctypes提高Python的执行速度
2016/09/09 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
python 如何停止一个死循环的线程
2020/11/24 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
亲子活动总结
2014/04/26 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
安全教育第一课观后感
2015/06/17 职场文书
初中语文教师研修日志
2015/11/13 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
详解Redis实现限流的三种方式
2021/04/27 Redis
新手入门Mysql--概念
2021/06/18 MySQL
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫