Filament를 사용하면 레코드에 첨부 파일을 추가할 수 있지만 레코드를 삭제할 때 첨부 파일이 삭제되지는 않습니다.
이 문제를 해결하기 위해 다음 두 가지 대안이 있습니다.
모델이 삭제되려고 하면 삭제 이벤트가 발생합니다. 이 이벤트를 수신하여 모델이 더 이상 존재하지 않기 전에 첨부 파일을 삭제하는 기능을 트리거할 수 있습니다.
모델 클래스 내부에 부팅된 메서드를 추가하여 모델에 새 이벤트 리스너를 등록할 수 있습니다.
class Project extends Model { protected $fillable = [ 'title', 'slug', 'repository', 'description', 'thumbnail', ]; /** * The "booted" method of the model. */ protected static function booted(): void { static::deleting(function ($project) { Storage::disk('public')->delete($project->thumbnail); }); } }
이 코드는 모델을 삭제하기 전에 썸네일 첨부 파일을 삭제합니다.
Laravel 문서 https://laravel.com/docs/11.x/eloquent#events-using-closures에서 이에 대한 자세한 내용을 읽을 수 있습니다.
또 다른 옵션은 삭제 작업의 동작을 변경하는 것입니다.
protected function getActions(): array { return [ Actions\DeleteAction::make() ->after(function (Project $project) { // delete single if ($project->thumbnail) { Storage::disk('public')->delete($project->thumbnail); } }) ]; }
요구 사항에 더 잘 맞는 옵션을 사용할 수 있지만 이벤트 리스너를 추가하면 앱의 필라멘트 작업이나 다른 코드 부분에 의해 모델이 삭제될 때 첨부 파일이 삭제된다는 점을 명심해야 합니다.
옵션을 선택해야 할 때마다 결정되기 때문에 이는 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3