در فریمورک قدرتمند لاراول، اعتبارسنجی فرمها یکی از مهمترین مراحل تضمین امنیت فرم در لاراول و حفظ یکپارچگی دادهها است. با پیادهسازی صحیح آموزش اعتبارسنجی لاراول، میتوان از ورود دادههای مخرب یا ناقص جلوگیری کرد و تجربه کاربری بهتری ایجاد نمود. این راهنمای ولیدیشن لاراول تمامی مفاهیم از قواعد ساده مانند required و email تا ساخت اعتبارسنجیهای سفارشی را پوشش میدهد.
در این Laravel validation tutorial، شما میآموزید چگونه قوانین را در کنترلرها، Request کلاسها و حتی بهصورت خودکار در مدلها پیادهسازی کنید. علاوه بر این، نکات حرفهای برای مدیریت پیامهای خطا و بهبود UX نیز ارائه میشود. اگر بهدنبال آموزش جامع لاراول هستید، یادگیری اعتبارسنجی فرمها گامی حیاتی در مسیر تبدیل شدن به یک توسعهدهنده حرفهای است.
چرا اعتبار سنجی فرم ها در لاراول اهمیت دارد؟
در هر اپلیکیشن تحت وب، اعتبارسنجی فرمها نقشی حیاتی در تضمین امنیت اپلیکیشن وب و پایداری سیستم دارد. فریمورک لاراول با ارائه ابزارهای قدرتمند ولیدیشن، این فرآیند را ساده و درعینحال هوشمندانه میسازد. اهمیت ولیدیشن تنها در بررسی صحت دادهها خلاصه نمیشود؛ بلکه بهطور مستقیم بر کیفیت، اعتمادپذیری و عملکرد کل سیستم تأثیر میگذارد.
بدون اعتبارسنجی مناسب، دادههای ورودی کاربر میتوانند ناقص، نادرست یا حتی مخرب باشند. این ضعف ممکن است در نهایت منجر به جلوگیری از حملات SQL Injection نشود و امنیت کلی پروژه را به خطر اندازد. از سوی دیگر، اعتبارسنجی دقیق باعث میشود تا دادهها بهصورت استاندارد ذخیره شده و انسجام در پایگاه داده حفظ شود.
اعتبارسنجی نهتنها برای امنیت، بلکه برای بهبود تجربه کاربری (UX) نیز حیاتی است. وقتی کاربر بازخورد واضح و لحظهای درباره خطاهای فرم دریافت میکند، تعامل او با سیستم بهمراتب روانتر و حرفهایتر میشود. در نتیجه، ولیدیشن در لاراول پلی است میان امنیت و کاربرپسندی که هر توسعهدهندهای باید آن را جدی بگیرد.
شروع سریع: اولین اعتبارسنجی در لاراول
لاراول با سیستم اعتبارسنجی قدرتمند خود، فرآیند بررسی دادههای کاربر را بسیار ساده کرده است. در این آموزش، قصد داریم یک مثال اعتبارسنجی لاراول را قدمبهقدم بسازیم و با استفاده از متد validate در لاراول، دادههای ورودی را کنترل کنیم.
ابتدا باید مسیر ارسال فرم را مشخص کنیم. در مرحلهی تعریف Route در لاراول، کافی است بنویسید:
Route::post('/register', [UserController::class, 'store']);
سپس در کنترلر مربوطه (مثلاً UserController)، با استفاده از متد validate در لاراول قوانین اعتبارسنجی را تعریف میکنیم:
public function store(Request $request)
{
$request->validate([
'name' => 'required|min:3',
'email' => 'required|email',
'password' => 'required|min:8|confirmed'
]);
return back()->with('success', 'ثبتنام با موفقیت انجام شد.');
}
اکنون نوبت به بخش نمایش خطاهای ولیدیشن در قالب Blade میرسد. کافی است در فایل register.blade.php کد زیر را قرار دهید:
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<form method="POST" action="/register">
@csrf
<input type="text" name="name" placeholder="نام" value="{{ old('name') }}">
@error('name') <small class="text-danger">{{ $message }}</small> @enderror
<input type="email" name="email" placeholder="ایمیل" value="{{ old('email') }}">
@error('email') <small class="text-danger">{{ $message }}</small> @enderror
<input type="password" name="password" placeholder="رمز عبور">
<input type="password" name="password_confirmation" placeholder="تکرار رمز عبور">
@error('password') <small class="text-danger">{{ $message }}</small> @enderror
<button type="submit">ارسال</button>
</form>
با این ساختار ساده، فرم شما ایمن، کاربرپسند و حرفهای خواهد بود. دادهها قبل از ورود به سیستم بررسی میشوند، خطاها بهصورت شفاف به کاربر نمایش داده میشوند، و فرآیند ثبتنام تجربهای روان و مدرن را ارائه میدهد.
سه روش اصلی برای اعتبارسنجی فرمها در لاراول
برای پیادهسازی این فرایند، لاراول سه روش اصلی ارائه میدهد. انتخاب هر روش به نیاز پروژه و میزان پیچیدگی فرم بستگی دارد. در ادامه، این سه روش ولیدیشن در لاراول را به زبان ساده بررسی میکنیم و مزایا و موارد استفادهی هرکدام را توضیح میدهیم.
روش اول: استفاده از متد validate در کنترلر
این روش سادهترین و سریعترین راه برای اعتبارسنجی دادهها در لاراول است. اگر فرمی دارید که چند فیلد ساده دارد، این گزینه بهترین انتخاب است. کافی است داخل متد کنترلر از تابع $request->validate() استفاده کنید و قوانین را برای هر فیلد بنویسید.
برای مثال:
public function store(Request $request)
{
$request->validate([
'name' => 'required|min:3',
'email' => 'required|email',
'password' => 'required|min:8|confirmed'
]);
// ادامهی منطق ثبت داده
}
در اینجا اگر کاربر نام، ایمیل یا رمز عبور را اشتباه وارد کند، لاراول بهصورت خودکار او را به صفحه قبل برمیگرداند و خطاها را در متغیر $errors ذخیره میکند. سپس در فایل Blade میتوانید خطاها را بهسادگی نشان دهید:
@error('email') <small class="text-danger">{{ $message }}</small> @enderror
مزایا:
-
ساده و سریع برای پیادهسازی
-
مناسب برای فرمهای کوچک
-
بدون نیاز به ساخت کلاس یا فایل جدید
معایب:
-
اگر فرم شما پیچیده شود، کنترلر شلوغ و نامنظم خواهد شد.
روش دوم: ساخت Validator بهصورت دستی
گاهی نیاز دارید کنترل بیشتری بر فرآیند ولیدیشن داشته باشید، مخصوصاً در موقعیتهایی مثل ارسال داده از طریق AJAX یا زمانی که نمیخواهید از رفتار پیشفرض لاراول (بازگشت به صفحه قبلی) استفاده کنید. در این حالت میتوانید از Validator facade و متد Validator::make() استفاده کنید.
مثلاً:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'age' => 'required|numeric|min:18',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
در این روش، شما کنترل کاملی بر خروجی دارید. میتوانید مشخص کنید اگر خطایی رخ داد، پاسخ JSON ارسال شود یا کاربر به مسیر خاصی هدایت گردد.
مزایا:
-
مناسب برای پروژههای API یا درخواستهای AJAX
-
امکان شخصیسازی کامل پیامها و خروجیها
-
قابل استفاده در منطق پیچیده یا شرطی
معایب:
-
کد کمی طولانیتر میشود
-
برای فرمهای ساده ممکن است غیرضروری باشد
روش سوم: استفاده از Form Request برای اعتبارسنجی حرفهای
در پروژههای بزرگ، بهترین روش استفاده از Form Requests است. این رویکرد به شما اجازه میدهد منطق اعتبارسنجی را در یک کلاس جداگانه بنویسید تا کنترلرها تمیز و خوانا باقی بمانند. برای ایجاد آن کافی است دستور زیر را اجرا کنید:
php artisan make:request StoreUserRequest
سپس در فایل ساختهشده در مسیر app/Http/Requests/StoreUserRequest.php، دو متد اصلی وجود دارد:
-
authorize() → برای مشخص کردن اینکه آیا کاربر اجازه ارسال این درخواست را دارد یا نه.
-
rules() → برای تعریف قوانین اعتبارسنجی فیلدها.
مثلاً:
public function rules()
{
return [
'name' => 'required|min:3',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
];
}
و سپس در کنترلر:
public function store(StoreUserRequest $request)
{
// دادهها بهصورت خودکار اعتبارسنجی شدهاند
}
مزایا:
-
سازماندهی بهتر کد و تمیز کردن کنترلر (Clean Controller)
-
قابلیت تست و نگهداری بالا
-
مناسب برای پروژههای بزرگ و پیچیده
معایب:
-
نیاز به ساخت فایل جداگانه برای هر فرم
-
یادگیری اولیه کمی بیشتر نسبت به سایر روشها
لیست کامل قوانین اعتبارسنجی (Validation Rules) در لاراول

لاراول یکی از کاملترین مجموعههای قوانین ولیدیشن را در بین فریمورکهای PHP ارائه میدهد. این قوانین به توسعهدهندگان کمک میکنند تا بدون نیاز به نوشتن کدهای پیچیده، دادههای ورودی کاربران را بهطور دقیق و ایمن بررسی کنند. سیستم Validation Rules List لاراول شامل صدها قانون از پیش تعریفشده است که میتوان آنها را بهراحتی در پروژههای کوچک و بزرگ به کار برد. از قوانین پایه مانند بررسی خالی نبودن فیلد (قانون required) یا فرمت صحیح ایمیل (قانون email) گرفته تا قوانین پیشرفتهتر مانند قانون unique برای بررسی یکتایی مقدار در پایگاه داده و exists برای اطمینان از وجود رکورد مرتبط، همگی با چند خط کد قابل اجرا هستند. در ادامه با پرکاربردترین این قوانین آشنا میشویم.
قوانین عمومی و متنی
این دسته برای اعتبارسنجی فیلدهای متنی و ساده استفاده میشوند:
-
required → فیلد نباید خالی باشد.
-
string → مقدار باید از نوع رشته (string) باشد.
-
min:n / max:n → حداقل و حداکثر طول رشته یا عدد را مشخص میکند.
-
email → بررسی میکند که مقدار واردشده ساختار معتبر ایمیل داشته باشد.
-
regex → برای بررسی الگوهای خاص با عبارات منظم استفاده میشود.
نمونه:
$request->validate([
'name' => 'required|string|min:3|max:50',
'email' => 'required|email'
]);
قوانین مربوط به پایگاه داده
این گروه برای بررسی دادهها در دیتابیس کاربرد دارد:
-
unique:table,column → بررسی میکند مقدار واردشده در جدول خاصی تکراری نباشد.
-
exists:table,column → بررسی میکند که مقدار در ستون مشخصشده وجود داشته باشد.
مثال کاربردی:
'email' => 'required|email|unique:users,email',
'category_id' => 'exists:categories,id'
قوانین عددی و تاریخ
لاراول ابزارهای متنوعی برای بررسی اعداد و تاریخها دارد:
-
numeric → بررسی میکند که مقدار عددی باشد.
-
integer → فقط عدد صحیح مجاز است.
-
date → بررسی صحت فرمت تاریخ.
-
before / after → بررسی میکند که تاریخ قبل یا بعد از یک زمان مشخص باشد.
قوانین اعتبارسنجی فایل و تصویر
برای آپلود فایلها، تصاویر و مدارک نیز مجموعهای از قوانین آماده وجود دارد:
-
file → بررسی میکند که مقدار ورودی واقعاً فایل باشد.
-
image → فایل باید تصویر با پسوند معتبر (jpg, png, gif و...) باشد.
-
mimes:jpg,png,pdf → نوع خاص فایل را محدود میکند.
-
max:2048 → حداکثر حجم فایل به کیلوبایت.
نمونه:
$request->validate([
'avatar' => 'required|image|mimes:jpg,png|max:2048'
]);
این قوانین بهتنهایی یا در ترکیب با هم قابل استفاده هستند. انعطافپذیری بالای قوانین ولیدیشن لاراول باعث میشود که اعتبارسنجی دادهها در هر نوع پروژه – از فرمهای ساده گرفته تا سیستمهای پیچیده – به آسانی انجام شود، بدون نیاز به نوشتن منطق اضافی یا تکراری.
سفارشیسازی پیامهای خطا در اعتبارسنجی لاراول
بهصورت پیشفرض، پیامهای خطای لاراول به زبان انگلیسی نمایش داده میشوند. برای کاربران فارسیزبان، این پیامها ممکن است نامفهوم یا غیرکاربرپسند باشند. خوشبختانه، لاراول امکان سفارشیسازی کامل پیامها را فراهم کرده است تا بتوانید تجربهای بومی و حرفهای برای کاربران خود بسازید. این فرآیند که با عنوان پیام خطای سفارشی لاراول یا Custom validation messages شناخته میشود، از طریق دو روش اصلی انجام میگیرد: ویرایش فایل زبان و تعریف پیامها در کد اعتبارسنجی.
۱. استفاده از فایل زبان (validation.php)
لاراول در مسیر resources/lang/fa/validation.php فایلی را در اختیار شما قرار میدهد که میتوانید ترجمهها و پیامهای خطا را در آن قرار دهید. اگر فولدر زبان فارسی وجود ندارد، میتوانید آن را بهصورت دستی ایجاد کنید. در این فایل، کلید هر قانون ولیدیشن مشخص شده و میتوانید پیامها را به فارسی تغییر دهید:
'required' => 'فیلد :attribute الزامی است.',
'email' => 'فرمت ایمیل وارد شده معتبر نیست.',
'unique' => 'مقدار :attribute قبلاً ثبت شده است.',
در اینجا :attribute نام فیلد را بهصورت پویا جایگزین میکند.
۲. تعریف پیامها در Form Request یا کنترلر
اگر از messages() method in Form Request استفاده میکنید، میتوانید پیامهای خاص هر فیلد را مستقیماً در کلاس درخواست سفارشی تعریف کنید:
public function messages()
{
return [
'email.required' => 'وارد کردن ایمیل الزامی است.',
'password.min' => 'رمز عبور باید حداقل ۸ کاراکتر باشد.',
];
}
این روش برای پروژههایی که نیاز به کنترل دقیق پیامهای خطا در فرمهای خاص دارند، بسیار مفید است.
در نهایت، با فارسیسازی خطاهای ولیدیشن و تنظیم پیامهای دقیق و شفاف، نهتنها ظاهر پروژه حرفهایتر میشود، بلکه کاربران نیز تجربهای روانتر و انسانیتر از تعامل با فرمهای شما خواهند داشت.
تکنیکهای پیشرفته: ساخت قوانین اعتبارسنجی سفارشی (Custom Validation Rules)
گاهی اوقات، قوانین پیشفرض لاراول پاسخگوی همه نیازهای شما نیستند. برای مثال، ممکن است بخواهید صحت کد ملی، شماره موبایل با فرمت خاص یا شناسههای سفارشی سازمانی را بررسی کنید. در چنین مواردی، لاراول این امکان را میدهد تا قوانین خاص خودتان را ایجاد کنید. با استفاده از قانون ولیدیشن سفارشی (Custom Validation Rule)، میتوانید منطق پیچیده و خاص پروژه خود را در قالب یک قانون تمیز، مجزا و قابل استفاده مجدد پیادهسازی کنید. دو روش اصلی برای این کار وجود دارد: استفاده از Rule Objects و استفاده از متد Validator::extend.
روش اول: استفاده از Rule Objects
رویکرد مدرن و توصیهشده در نسخههای جدید لاراول، استفاده از Rule Objects است. برای ایجاد یک قانون جدید، کافی است دستور زیر را اجرا کنید:
php artisan make:rule NationalCode
این دستور یک کلاس جدید در مسیر app/Rules ایجاد میکند. این کلاس Rule شامل دو متد کلیدی است:
-
passes($attribute, $value) → منطق اصلی اعتبارسنجی را تعریف میکند.
-
message() → پیام خطای مخصوص همان قانون را بازمیگرداند.
مثلاً برای اعتبارسنجی کد ملی:
public function passes($attribute, $value)
{
return preg_match('/^[0-9]{10}$/', $value);
}
public function message()
{
return 'کد ملی واردشده معتبر نیست.';
}
در نهایت، در کنترلر یا Form Request میتوانید از آن استفاده کنید:
'code_melli' => [new NationalCode]
این روش تمیز، قابلتست و مناسب برای پروژههای بزرگ است؛ چرا که منطق اعتبارسنجی شما را از بقیه کد جدا نگه میدارد.
روش دوم: استفاده از Closureها و متد extend
اگر قانون شما سادهتر است و نیازی به کلاس جداگانه ندارد، میتوانید از متد Validator::extend استفاده کنید. این روش معمولاً در فایل AppServiceProvider یا هر Service Provider دلخواه تعریف میشود.
نمونه:
use Illuminate\Support\Facades\Validator;
Validator::extend('mobile', function ($attribute, $value, $parameters, $validator) {
return preg_match('/^09[0-9]{9}$/', $value);
});
حالا میتوانید در ولیدیشن خود از قانون جدید استفاده کنید:
'phone' => 'required|mobile'
در اینجا، قانون mobile بررسی میکند که شماره موبایل با فرمت صحیح ایرانی وارد شده باشد.
مزیت این روش: سریع، مناسب برای قوانین ولیدیشن یکبار مصرف و قابل تعریف در همان فایل پروژه.
محدودیت: منطق و پیام خطا در یک مکان باقی میماند و در پروژههای بزرگ ممکن است باعث شلوغی کد شود.
هر دو روش ابزارهایی قدرتمند برای ساخت منطق اعتبارسنجی پیچیده هستند. Rule Objects برای پروژههای بزرگ و سازمانیافته توصیه میشود، در حالیکه متد extend برای قوانین سبک و سریع گزینهای عالی است.
جمعبندی نهایی: گام آخر در تسلط بر اعتبارسنجی لاراول
اعتبارسنجی در لاراول تنها یک مرحله فنی نیست؛ بلکه سنگبنای امنیت، پایداری و تجربه کاربری حرفهای در هر اپلیکیشن محسوب میشود. در این راهنما، از سادهترین قواعد مانند required و email تا ساخت قوانین سفارشی (Custom Rules) را بررسی کردیم تا دیدی کامل از قدرت سیستم Laravel Validation بهدست آورید.
لاراول با سه روش اصلی ولیدیشن — استفاده از متد validate در کنترلر، ساخت Validator دستی، و بهرهگیری از Form Request — به شما این امکان را میدهد که بسته به مقیاس پروژه، بهترین ساختار را انتخاب کنید. همچنین یاد گرفتیم که چگونه پیامهای خطا را فارسیسازی کنیم، قوانین را در قالب فایل جداگانه مدیریت کنیم و حتی اعتبارسنجی شرطی یا مخصوص درخواستهای AJAX بنویسیم.
در نهایت، هدف از ولیدیشن تنها جلوگیری از ورود دادههای اشتباه نیست، بلکه ایجاد سیستمی ایمن، هوشمند و کاربرپسند است که به کاربر احساس اعتماد و کنترل میدهد. اگر بهدنبال تبدیل شدن به یک توسعهدهنده حرفهای در لاراول هستید، درک عمیق از این مبحث نهتنها ضروری بلکه گامی اساسی در مسیر تخصصی شدن شما در فریمورک لاراول خواهد بود.









نظر خود را بنویسید