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 高手之路(一)
Oct 09 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
PHP环形链表实现方法示例
Sep 15 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 分页函数multi() discuz
2009/06/21 PHP
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
破解Session cookie的方法
2006/07/28 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
javascript arguments使用示例
2014/12/16 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python实现的NN神经网络算法完整示例
2018/06/19 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
对python函数签名的方法详解
2019/01/22 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
Araks官网:纽约内衣品牌
2020/10/15 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
校园之声广播稿
2015/08/18 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
java实现对Hadoop的操作
2021/07/01 Java/Android
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python