كيف يمكن إستخدام FormRequest واحد لعمليتي الإدخال والتحديث في حال أن الشروط مختلفة.

كيف يمكن إستخدام FormRequest واحد لعمليتي الإدخال والتحديث في حال أن الشروط مختلفة.

2024-05-14 وقت القراءه : 1 دقائق

في عملية التحقق من المدخلال، يفضل إستخدام FormRequest، حيث يمكن إستخدامة في عمليات الإدخال والتعديل store, update، لكن ببعض الأحيان تكون بعض الحقول إجبارية في عملية الإدخال وليس إجبارية في عملية التعديل.

يلجأ البعض لإنشاء كلاسين للتحقق لحل المشكلة أعلاه، مثلا يقوم بإنشاء StoreUserRequest لدالة store و UpdateUserRequest لدالة Update، لكن في هذا المقال سنتعرف على كيفية إستخدام FormRequest واحد للعمليتين، حتى إن كانت بعض الحقول إجبارية في عملية store وليست إجبارية في عملية update.

لفرض إنني أقوم بتخزين الإجابات لمستخدم معين، وحقل الإجابة و user_id إجباري في عملية store ولكن user_id ليس إجباري في update.

public function store(AnswerRequest $request){
Answer::create(
    $request->validated()+
    ['user_id'=>auth()->id()]
 );
}


public function update(AnswerRequest $request, Answer $answer)
{
    $answer->update($request->validated());
}


كما نلاحظ إننا للدالتين إستخدمنا AnswerRequest، فالحل يكون من خلال تحديد نوع request هل هو POST و PUT

class AnswerRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'answer' => 'required',
            'question_id' => [
                Rule::when(request()->isMethod('POST'),'required'),
                Rule::when(request()->isMethod('PUT'),'optional'),
                'required','integer','exists:questions,id'
            ]
        ];
    }
}

كما نلاحظ بالأعلى في question_id فإنها تأخذ مصفوفة نحدد بها نوع request فهو required في حالة POST و optional في حالة PUT ومن ثم نضع عمليات التحقق.

للمزيد من عمليات التحقق في لارافيل لأكثر من 40 عملية تحقق من هنا.

إضافة تعليق
Loading...