يسمح لك 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); } }) ]; }
يمكنك استخدام الخيار الذي يناسب متطلباتك بشكل أفضل، ولكن يجب أن تضع في اعتبارك أن إضافة مستمع الحدث سيؤدي إلى حذف المرفق عند حذف النموذج الخاص بك، كلما حدث ذلك من خلال إجراء Filament أو جزء آخر من التعليمات البرمجية في تطبيقك.
هذا أمر مهم لأنه من المحتمل أن يحدد الخيار الذي يجب عليك اختياره.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3