آموزش جامع اعتبارسنجی دادهها (Validation) در لاراول
اعتبارسنجی دادههای ورودی (Validation) یکی از کلیدیترین مراحل توسعه در هر اپلیکیشن وب است تا از صحت، امنیت و یکپارچگی اطلاعات مطمئن شویم. فریمورک لاراول ابزارهای تنوعطلب و بسیار قدرتمندی را برای بررسی ورودیهای کاربر ارائه میدهد. Laravel Validation به شما اجازه میدهد تا بدون درگیر شدن با شرطهای پیچیده و کدهای تکراری، قوانین سختگیرانهای روی فرمها و APIهای خود اعمال کنید.
هر توسعه دهنده Laravel یا Backend Developer که روی بخشهایی مانند طراحی فروشگاه اینترنتی یا طراحی پنل مدیریت کار میکند، باید بداند چگونه درخواستهای ورودی را قبل از پردازش دیتابیس فیلتر کند. لاراول در صورت رد شدن اعتبارسنجی، به صورت خودکار پاسخ مناسب (در درخواستهای سنتی هدایت به صفحه قبل و در REST API خطای ۴۲۲) را ارسال میکند. در ادامه روشهای مختلف استفاده از سیستم Validation را بررسی میکنیم.
🚀 بخش ۱: اعتبارسنجی پایه در کنترلر (Validation Logic)
سادهترین روش برای اعتبارسنجی، استفاده از متد ()request->validate$ مستقیماً درون اکشنهای Controller است. اگر اعتبارسنجی رد شود، لاراول یک ValidationException پرتاب میکند که بهطور خودکار مدیریت میشود.
۱. نمونه کد اعتبارسنجی ساده در کنترلر
قوانین اعتبارسنجی میتوانند به صورت آرایه یا رشته متصل با کاراکتر pipe ( | ) تعریف شوند:
use Illuminate\Http\Request;
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
'publish_at' => 'nullable|date',
]);
// در صورت عبور از اعتبارسنجی، ادامه کدها اجرا میشوند
// متد validate تنها دادههای تایید شده را برمیگرداند
}🛠️ بخش ۲: مدیریت و نمایش خطاهای اعتبارسنجی
در درخواستهای معمولی (Blade)، متغیر errors$ همواره در تمام Viewها در دسترس است. لاراول خطاهای قبلی را به همراه دادههای فرم در جلسه (Session) ذخیره میکند.
۲. نمایش خطاها و حفظ دادههای قبلی فرم
با استفاده از دایرکتیو error@ و تابع کمکی old میتوان فرمهای کاربرپسند ایجاد کرد:
<!-- استفاده در فایلهای Blade -->
<input type="text" name="title" value="{{ old('title') }}">
@error('title')
<div class="alert alert-danger">{{ $message }}</div>
@enderror💡 ساخت فرم Request سفارشی (Form Request Validation)
جداسازی منطق اعتبارسنجی
برای پروژههای بزرگ، قرار دادن قوانین اعتبارسنجی در کنترلر باعث شلوغی کد میشود. بهترین روش استفاده از کلاسهای Form Request است تا منطق اعتبارسنجی کاملاً ایزوله شود.
دستور ساخت Form Request
برای ساخت یک کلاس اعتبارسنجی جدید دستور زیر را در ترمینال بنویسید:
php artisan make:request StorePostRequestنمونه کلاس Form Request
این کلاس شامل متد authorize برای بررسی دسترسی و متد rules برای تعریف قوانین است:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePostRequest extends FormRequest
{
public function authorize(): bool
{
return true; // تعیین دسترسی کاربر برای ارسال فرم
}
public function rules(): array
{
return [
'title' => ['required', 'unique:posts', 'max:255'],
'body' => ['required'],
];
}
}🧪 قوانین کاربردی و متداول (Common Validation Rules)
لاراول دهها قانون پیشفرض ارائه میدهد که مهمترین آنها عبارتند از:
قانون required و nullable
برای اجباری یا اختیاری بودن فیلدها استفاده میشود.
قانون unique:table,column
بررسی میکند که مقدار فیلد تکراری نباشد (مثلاً ایمیل ثبتنامی تکراری نباشد).
قوانین exists, email, numeric, image
بررسی وجود داده در دیتابیس، ساختار ایمیل، عددی بودن و پسوند و سایز فایلهای آپلودی.
🎨 اعتبارسنجی آرایهها و فیلدهای چندتایی (Nested Validation)
اگر فرم شما شامل آرایهای از دادهها (مانند لیست مشخصات محصول یا کارمندان) است، میتوانید از سینتکس نقطه (.) استفاده کنید:
اعتبارسنجی فیلدهای آرایهای
استفاده از کاراکتر ستاره (*) برای اعمال قانون روی تمامی اعضای آرایه:
$request->validate([
'photos.*' => 'image|mimes:jpg,png|max:2048',
'users.*.email' => 'required|email|unique:users,email',
]);🔐 ساخت قوانین سفارشی (Custom Validation Rules)
زمانی که قوانین پیشفرض لاراول جوابگوی نیاز شما نیست، میتوانید Rule اختصاصی خودتان را بسازید:
۱. دستور ساخت Custom Rule
با فرمان زیر یک کلاس قانون جدید ایجاد کنید:
php artisan make:rule Uppercase۲. پیادهسازی متد validate
تطبیق شرط اختصاصی و ارسال پیام خطا در صورت عدم برقراری شرط:
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class Uppercase implements ValidationRule
{
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (strtoupper($value) !== $value) {
$fail('مقدار فیلد :attribute باید تماماً با حروف بزرگ باشد.');
}
}
}🛠️ جمعبندی؛ تضمین سلامت دادهها در لاراول
نکته پایانی برای توسعهدهندگان
استفاده اصولی از ابزارهای اعتبارسنجی لاراول نه تنها امنیت وباپلیکیشن شما را در برابر دادههای مخرب بالا میبرد، بلکه تجربه کاربری (UX) فوقالعادهای هنگام مواجهه با خطاها ایجاد میکند. پیشنهاد میشود برای حفظ خوانایی کد و رعایت اصولی نظیر DRY، همیشه در پروژههای صنعتی و پیشرفته به جای کنترلرها از Form Request استفاده کنید تا آماده بسترسازی امن برای طراحی API و سامانههای پیچیده باشید.