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 变量定义方法
Jun 14 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
Symfony2函数用法实例分析
Mar 18 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
js加强的经典分页实例
2013/03/15 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
机修工岗位职责
2013/11/24 职场文书
房地产融资计划书
2014/01/10 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
应聘护士求职信
2014/07/21 职场文书
七一讲话心得体会
2014/09/05 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android