در این مقاله آموزش استفاده از Form Requests ها و کاربرد آنها در فریم ورک لاراول رو به همراه مثال یاد خواهیم گرفت.
در ابتدا تعریفی از فرم ریکوئست ها رو میگیم و بعد میریم سراغ مثال.
Form Requests چیست؟
برای سناریوهای اعتبارسنجی، ممکن است بخواهیم یک “درخواست فرم” ایجاد کنیم. درخواستهای فرم، کلاسهای درخواست سفارشی هستند که منطق اعتبارسنجی و مجوز خود را کپسوله میکنند.
خوب این حالا یعنی چی؟!
فرض کنید ما برای پردازش های “create” , “update” اعتبار سنجی هایی رو قبل از پردازش نهایی اعمال کردیم که مواردشون هم تکراریه، مثلا برای “create” گفتیم فیلد “title” خالی نباشد و این اعتبار سنجی رو هم برای حالت “update” تکرار کردیم.
برای اینکه تکرار اعتبارسنجی ها رو نداشته باشیم یا آنها رو کاهش بدیم از “Form Request” ها استفاده می کنیم.
مثالی از کاربرد Form Request
کنترلر و متدهای “store”, “update” زیر رو که مربوط به درج و بروزرسانی رکورد هست رو در نظر بگیرید.
می بینید که اعتبار سنجی از طریق متد validate برای محتوای دریافتی از فرم اعمال شده، حالا ما می خوایم این اعتبار سنجی رو ببریم از طریق یک Form Request انجام بدیم، به چه شکل؟
1) ایجاد Form Request
وارد ترمینال میشم و دستور زیر رو می نویسم.
php artisan make:request PostFormRequest
فایل های request در مسیر زیر قرار دارند:
app -> Http -> Requetss
وارد From Request ایجاد شده که در این مثال نامش “PostFormRequest” هست میشم و کدهای اون رو به شکل زیر تغییر میدم.
'required|max:255|unique:posts,title,' . $this->id,
'excerpt' => 'required',
'body' => 'required',
'image' => ['mimes:jpg,png,jpeg', 'max:5048'],
'min_to_read' => 'min:0|max:60'
];
if(in_array($this->method(), ['POST'])) {
$rules['image'] = ['required', 'mimes:jpg,png,jpeg', 'max:5048'];
}
return $rules;
}
}
2) استفاده از Form Request
برای استفاده از اعتبار سنجی جدید که از طریق form Request ایجاد کردیم به کنترلر خودمم بر میگردم و کدینگ متدهای store , update رو به شکل زیر تغییر میدم.
بدین شکل ما با نوشتن یک پترن اعتبار سنجی می تونیم از تکرار جلوگیری کنیم خوانایی کدینگ پروژه رو نیز افزایش بدیم.
جمع بندی
در این مقاله کوتاه سعی کردم نحوه اعتبارسنجی از طریق Form Request ها در لاراول رو به شکل ساده توضیح بدم. امیدوارم این مطلب براتون مفید واقع شده باشه.
لطفا اگر نظر و پیشنهادی در خصوص مطالب و پیشبرد آنها دارید خوشحال میشم در قسمت دیدگاه ها مطرح بفرمایید.