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 13 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
解析strtr函数的效率问题
Jun 26 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 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+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
利用Python破解验证码实例详解
2016/12/08 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
详解Python设计模式之策略模式
2020/06/15 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
建龙钢铁面试总结
2014/04/15 面试题
服务之星获奖感言
2014/01/21 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
后勤主管岗位职责
2014/03/01 职场文书
公司总经理岗位职责
2014/03/15 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers