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调用Webservice实例代码
Jul 29 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
PHP中FTP相关函数小结
Jul 15 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP 时间处理类Carbon
May 20 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
20个PHP常用类库小结
2011/09/11 PHP
php浏览历史记录的方法
2015/03/10 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
python 判断网络连通的实现方法
2018/04/22 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
eBay德国站:eBay.de
2017/09/14 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
怎样写留学自荐信
2013/11/11 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
个人简历自我评价
2014/01/06 职场文书
八项规定对照检查材料
2014/08/31 职场文书
教师工作决心书
2015/02/04 职场文书
开除通知书范本
2015/04/25 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python