protected static function bootUpload() { static::updating(function (Model $model) { foreach ($model->getUploadFields() as $key) { $originalValue = array_get($model->original, $key); if (!empty($originalValue) and $originalValue != $model->attributes[$key] and file_exists($filePath = public_path($originalValue))) { unlink($filePath); } } }); static::saving(function (Model $model) { foreach ($model->getUploadFields() as $key) { if ($model->{$key} instanceof UploadedFile) { $model->attachFile($key, $model->{$key}); } } }); static::deleting(function (Model $model) { if (in_array(\Illuminate\Database\Eloquent\SoftDeletes::class, trait_uses_recursive($model)) && !$model->forceDeleting) { return; } foreach ($model->getUploadFields() as $key) { $filePath = $model->{$key . '_path'}; if (!empty($filePath) and file_exists($filePath)) { unlink($model->{$key . '_path'}); } } }); }
/** * Returns all traits used by a trait and its traits. * * @param string $trait * @return array */ function trait_uses_recursive($trait) { $traits = class_uses($trait); foreach ($traits as $trait) { $traits += trait_uses_recursive($trait); } return $traits; }
/** * Returns all traits used by a class, it's subclasses and trait of their traits * * @param string $class * @return array */ function class_uses_recursive($class) { $results = []; foreach (array_merge([$class => $class], class_parents($class)) as $class) { $results += trait_uses_recursive($class); } return array_unique($results); }