Laravel 事件侦听的几个方法 [Trait, Model boot(), Observer Class]
1 Trait
1.1 可以在 Trait 中定义一个静态的 bootFooBar() 方法,注:FooBar 是你的 Trait 名称
namespace App\Traits; use App\Archive; trait HasArchive
{
public static function bootHasArchive()
{
static::creating(function($model) {
info("Trait [HasArchive] creating...");
});
static::deleting(function($model) {
$model->archive()->delete();
});
} /**
* Model has an archive.
*
* @return mixed
*/
public function archive()
{
return $this->morphOne(Archive::class, 'model_has_archive');
}
}
1.2 这种方式非常适合用来对关联中间表中的数据进行相应处理 2 Model
2.1 定义静态的 boot() 方法
namespace App; use App\Traits\HasArchive;
use Illuminate\Database\Eloquent\Model;
use Kalnoy\Nestedset\NodeTrait; class Area extends BaseModel
{
use HasArchive;
use NodeTrait; protected $table = 'areas';
protected $guarded = []; public static function boot()
{
parent::boot();
static::creating(function (Area $area) {
info("Model [Area] creating...");
});
} }
2.2 这种方式定义起来比较简单粗暴,直接有效 3 利用 Observer 类
3.1 这种方法就不举例了,官方文档可查阅
3.2 此种方式,代码分离比较合理
3.3 建议,除了使用 Trait 方式复用代码外,都应该采用这种方法 4 小结
4.1 经测试,对事件的侦听,可在以上三种方式中都实现,不会相互覆盖。Laravel 会顺序调用
Laravel 事件侦听的几个方法 [Trait, Model boot(), Observer Class]的更多相关文章
- Android事件侦听器回调方法浅谈
http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- js事件流、事件处理程序/事件侦听器
1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...
- javascript中事件总结&通用的事件侦听器函数封装&事件委托
前言: JAVASCRIPT与HTML之间的交互是通过事件来实现的.事件,就是文档或浏览器窗口中发生的一些特定交互瞬间.可以使用侦听器( 或处理程序 )来预定事件,以便事件发生时执行相应的代码.这种在 ...
- JS 的事件基础、事件侦听与抛发、
前言 JavaScript是一种事件驱动型语言.事件驱动是指JavaScript引擎并不是在看到代码之后就会立即执行,而是会在合适的时间才去执行.这个合适的时间是指当某个事件发生之后(例如一个输入框的 ...
- 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器
程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...
- Unity3D 自定义事件(事件侦听与事件触发)
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间 ...
- 关于实现自定义Dialog和实现Dialog里view的事件监听的两种方法
一.自定义dialog. 二.实现dialog里view的事件监听 1.自定义dialog比较简单.在实例化new的时候,加入样式,布局就行了.或者重写dialog. 2.实现dialog里view的 ...
- laravel 事件监听
事件监听器监听到事件发生后会执行一些操作,Laravel使用观察者模式来实现这种监听机制 操作顺序:1.注册事件和监听器 -> 2.定义事件类 -> 3.定义监听类 -> 4.触发事 ...
随机推荐
- cmd寻找tomcat的命令和删除进程的命令
netstat -ano | findstr 8080taskkill -f -pid 端口 idea 异常关闭,无法启动Tomcat提示Error running ‘server_web’: Una ...
- GCD欧几里得的拓展算法
欧几里得算法的拓展主要是用于求解 : 已知整数 a, b,然后我们进行 ax + by == gcd(a , b) 的问题求解 那么如何进行求解呢?和欧几里得算法一样, 我们需要进行递归的方式进 ...
- 剑指offer38:输入一棵二叉树,求该树的深度
1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...
- nginx访问量统计 日常分析
nginx访问量统计 0.查询某个时间段的日志 cat appapi.dayutang.cn.access.log |grep 'POST'|grep '2019:10' > 20191059. ...
- Windows一键设置环境变量(以设置java环境变量为例)
右击以管理员方式运行 JDKSetting.bat @echo off color 0a echo.------------------------------------ echo.TODO:设 ...
- hdu 1506 最大子矩阵面积
//写动态规划的题目 要把主要问题提炼出来 这里的问题就是求area=(j-k+1)*a[i] 如果找到j k是解决这个题目的关键 这里暴力求肯定是要超时的 这里用dp来优化 #include< ...
- springboot由于bean加载顺序导致的问题
先记录现象: dubbo整合zipkin时,我的配置文件是这样的 @Bean("okHttpSender") public OkHttpSenderFactoryBean okHt ...
- thymeleaf 模板使用 提取公共页面
切记!!!thymeleaf模板的使用,姿势很重要!!!姿势不对,可能导致样式.js等的使用受到影响 前台开发中,由于页面目录结构不同,可能导致引入的公共页面中的的跳转路径在部分页面能用,部分页面不能 ...
- 作业13:Map相关知识点(一)
一 Map相关类图 二 Map接口 1 Map接口中的方法 jdk 方法名 简单描述 put(K,V):V 添加value,当Key对应无值,返回null;有值则返回上一个值.(覆盖式,可以反复覆盖前 ...
- python+django学习一
pycharm破解地址:https://blog.csdn.net/qq_32811489/article/details/78636049 按照视频写代码,记录关键的地方方便自己记忆, 视频教程地址 ...