یکی از تمیزترین راهها در معماری لاراول استفاده از Form Request برای جدا کردن منطق Validation است.
🧩 Form Request چیست؟
کلاسی است که از
Illuminate\Foundation\Http\FormRequest ارثبری میکند و تمام قوانین اعتبارسنجی، مجوزها و گاهی پیامهای خطا را در خودش نگه میدهد.🎯 مزایا:
• کنترلرهای کوتاه و خوانا ✨
• قابلیت تستپذیری بهتر
• استفادهٔ مجدد از قوانین بین چند اکشن
• جداسازی واضح لایهٔ HTTP از بیزینسلاگیک
✅ مثال قبل و بعد
نمونهٔ کنترلر شلوغ:
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8',
]);
User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return redirect()->route('users.index');
}
حالا همان منطق با Form Request تمیزتر میشود 👇
۱️⃣ ساخت Form Request
php artisan make:request StoreUserRequest
فایل ساختهشده را در مسیر
app/Http/Requests/StoreUserRequest.php ویرایش کن:class StoreUserRequest extends FormRequest
{
public function authorize(): bool
{
return true; // یا چکهای policy/permission
}
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'string', 'min:8'],
];
}
}
۲️⃣ سادهسازی کنترلر
حالا کنترلر فقط ورودی تمیز را تحویل میگیرد:
public function store(StoreUserRequest $request)
{
$data = $request->validated();
User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return redirect()->route('users.index');
}
👌 چند نکتهٔ کاربردی
• برای API میتوان از متد
failedValidation در Form Request برای برگرداندن JSON استاندارد استفاده کرد.• قوانین مشترک بین چند فرم را میتوان در یک Form Request پایه قرار داد و بقیه را از آن ارثبری داد.
• پیامهای خطای سفارشی را داخل متد
messages تعریف کن تا متن خطاها از کنترلر جدا بماند.برای جزئیات بیشتر، مستندات رسمی لاراول منبع خیلی خوبی است:
لینک مستندات Form Request
در پروژهٔ بعدی، فقط یک بار Form Request را راه بینداز؛ بعد از آن سخت میشود دوباره به کنترلرهای شلوغ برگردی 🚀
🔖 #Laravel #PHP #لاراول #Laravel #Form_Request #Validation #Clean_Code #PHP
👤 Developix
💎 Channel: @DevelopixLaravel