> 백엔드 개발 > PHP 튜토리얼 > 필라멘트: 기록 삭제 시 첨부 파일 삭제

필라멘트: 기록 삭제 시 첨부 파일 삭제

Mary-Kate Olsen
풀어 주다: 2024-10-16 06:07:02
원래의
914명이 탐색했습니다.

Filament: Delete Attachments when Deleting a Record

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에서 이에 대한 자세한 내용을 읽을 수 있습니다

Filament 삭제 동작 수정

또 다른 옵션은 삭제 작업의 동작을 변경하는 것입니다.

protected function getActions(): array
{
    return [
        Actions\DeleteAction::make()
            ->after(function (Project $project) {
                // delete single
                if ($project->thumbnail) {
                    Storage::disk('public')->delete($project->thumbnail);
                }
            })
    ];
}
로그인 후 복사

귀하의 요구 사항에 더 잘 맞는 옵션을 사용할 수 있지만 이벤트 리스너를 추가하면 앱의 필라멘트 작업이나 다른 코드 부분에 의해 모델이 삭제될 때마다 첨부 파일이 삭제된다는 점을 명심해야 합니다.

옵션을 선택해야 할 때마다 결정될 것이므로 이는 중요합니다.

위 내용은 필라멘트: 기록 삭제 시 첨부 파일 삭제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿