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的面试题集
Nov 19 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
thinkphp分页实现效果
Oct 13 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
PHP实现简单用户登录界面
Oct 23 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
JavaScript模拟push
2016/03/06 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
浅谈Node异步编程的机制
2017/10/18 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
python检测lvs real server状态
2014/01/22 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
工作会议主持词
2014/03/17 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
学历证明样本
2015/06/16 职场文书
毕业典礼致辞
2015/07/29 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript