TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #192 712
‏در خیلی از پروژه‌های لاراول، منطق اعتبارسنجی مستقیم داخل کنترلر نوشته می‌شود و کم‌کم کنترلر تبدیل به یک هیولای چندصد خطی می‌شود 😅

یکی از تمیزترین راه‌ها در معماری لاراول استفاده از 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
  • ❤ 8
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →