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 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
在线增减.htpasswd内的用户
Oct 09 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP中使用BigMap实例
Mar 30 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
抛弃 PHP 代价太高
Apr 26 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
php图片裁剪函数
Oct 31 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 echo 输出字符串函数详解
2010/05/13 PHP
浅谈json_encode用法
2015/03/05 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
js select常用操作控制代码
2010/03/16 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Python从零开始创建区块链
2018/03/06 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
详解python中eval函数的作用
2019/10/22 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
自立自强的名人事例
2014/02/10 职场文书
爱牙日活动总结
2014/08/29 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
python实现局部图像放大
2021/11/17 Python
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers