اصول برنامه نویسی بهینه:اعتبارسنجی ها را در Request classes انجام دهید

اعتبارسنجی ها را در Request classes انجام دهید نه در controllers.

این یک رویکرد خوب برای پاک‌سازی کد و بهبود قابلیت نگهداری و تست است. با اعتبارسنجی را در کلاس‌های درخواست (Request classes) انجام دادن، مسئولیت‌های مربوط به اعتبارسنجی داده‌ها را از کنترلرها جدا می‌کنید و کدهای کنترلر را ساده‌تر و قابل مدیریت‌تر می‌کنید.

در لاراول، کلاس‌های درخواست معمولاً در مسیر app/Http/Requests قرار می‌گیرند. این کلاس‌ها مسئولیت اعتبارسنجی داده‌های درخواستی که توسط کاربران ارسال می‌شوند را دارند. به عنوان مثال، شما می‌توانید قوانین اعتبارسنجی مربوط به یک فرم ورود را در کلاسی به نام LoginRequest قرار دهید.

استفاده از کلاس‌های درخواست به شما این امکان را می‌دهد که قوانین اعتبارسنجی را یکبار تعریف کرده و در اکثر کنترلرها مورد استفاده قرار دهید. همچنین، این کلاس‌ها را می‌توانید به راحتی تست کنید و قابلیت استفاده مجدد بالایی دارند.

با این رویکرد، کنترلرها فقط مسئولیت انجام عملیات مربوط به برنامه (مانند استخراج داده‌های لازم از درخواست و انجام عملیات مربوطه بر روی آن) را دارند و اعتبارسنجی داده‌ها را به کلاس‌های درخواست منتقل می‌کنید. این باعث می‌شود کدهای کنترلرها ساده‌تر، قابل تست‌تر و قابل نگهداری‌تر باشند.

روش نادرست:

public function store(Request $request)
{
    $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
        'publish_at' => 'nullable|date',
    ]);

    ...
}

روش بهتر:

public function store(PostRequest $request)
{
    ...
}

class PostRequest extends Request
{
    public function rules()
    {
        return [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
            'publish_at' => 'nullable|date',
        ];
    }
}