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 base64+gzinflate压缩编码和解码代码
Oct 03 PHP
PHP中的integer类型使用分析
Jul 27 PHP
PHPEXCEL 使用小记
Jan 06 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php将session放入memcached的设置方法
Feb 14 PHP
PHP可变函数学习小结
Nov 29 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 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
adodb与adodb_lite之比较
2006/12/31 PHP
PHP开发注意事项总结
2015/02/04 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
JS打印组合功能
2016/08/04 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python查看模块安装位置的方法
2018/10/16 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
小学母亲节活动方案
2014/03/14 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
普通党员整改措施
2014/10/24 职场文书
捐助感谢信
2015/01/22 职场文书
病人慰问信范文
2015/02/15 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
Python绘画好看的星空图
2022/03/17 Python