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 文件夹删除、php清除缓存程序
Aug 25 PHP
php5.3 废弃函数小结
May 16 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 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 获取本地IP代码
2013/06/23 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
Python绘制动态水球图过程详解
2020/06/03 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
函授本科自我鉴定
2014/02/04 职场文书
领导调研接待方案
2014/02/27 职场文书
大学毕业感言200字
2014/03/09 职场文书
解除劳动合同协议书
2014/04/14 职场文书
5s标语大全
2014/06/23 职场文书
商场消防安全责任书
2014/07/29 职场文书
出国留学导师推荐信
2015/03/26 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书