我正在构建一个包,该包记录在雄辩上发生的更改,并试图找出在restored
时忽略updated
事件的检查内容。
trait HasLogs
{
public static function bootHasLogs(): void
{
// created ...
self::updated(callback: fn ($model) => self::log($model, 'updated'));
self::deleted(callback: function ($model) {
// Ignore 'deleted' event when 'softDeleted' or 'forceDeleted'
if (in_array('IlluminateDatabaseEloquentSoftDeletes', (class_uses(self::class)))) {
return;
}
self::log($model, 'deleted');
});
if (in_array('IlluminateDatabaseEloquentSoftDeletes', (class_uses(self::class)))) {
// softDeleted ...
self::restored(callback: fn ($model) => self::log($model, 'restored'));
// forceDeleted ...
}
}
// ...
}
如果有帮助的话,下面是行动顺序:
- CCD_ 3对CCD_
- ----CCD_ 5被激发
- ----
Model::save()
- --------CCD_ 7被激发
- --------
Model::performUpdate()
- ------------CCD_ 9被激发
- ------------
Builder::update()
- ------------
updated
被触发 - --------
Model::finishSave()
- ------------CCD_ 13被激发
- ----CCD_ 14被激发
特征HasLogs
为默认设置为false
的名为loggableIsBeingRestored
的Model
添加了一个布尔属性。
该特征还为restoring
注册新的监听器,该监听器在所描述的动作的请求时将loggableIsBeingRestored
设置为true
。
然后CCD_ 22监听器在继续其动作之前检查CCD_。
trait HasLogs
{
public bool $loggableIsBeingRestored = false;
public static function bootHasLogs(): void
{
// ...
self::updated(callback: function ($model) {
if (isset($model->loggableIsBeingRestored) && $model->loggableIsBeingRestored) {
// This is a restored event so don't log!
return;
}
self::log($model, 'updated');
});
// ...
self::restored(callback: function ($model) {
self::log($model, 'restored');
$model->loggableIsBeingRestored = false;
});
self::restoring(callback: function ($model) {
$model->loggableIsBeingRestored = true;
});
}
// ...
}