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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
PHP版自动生成文章摘要
Jul 23 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
Laravel数据库读写分离配置的方法
Oct 13 PHP
php解析非标准json、非规范json的方式实例
Dec 10 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 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打开和关闭文件操作函数总结
2014/11/18 PHP
input 高级限制级用法
2009/03/26 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python psutil库安装教程
2018/03/19 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
纬创Java面试题笔试题
2014/10/02 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
会计电算化个人自我评价
2013/11/17 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
《故乡》教学反思
2014/04/10 职场文书
个人评语大全
2014/05/04 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
怎样写好工作计划
2019/04/10 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书