بخش دوم - اعتبارسنجی درخواست ها
لاراول یک سیستم اعتبارسنجی قدرتمند و انعطافپذیر ارائه میدهد که به شما امکان میدهد دادهها را به راحتی بررسی کرده و از ورود اطلاعات نامعتبر جلوگیری کنید.
اعتبارسنجی میتواند به روشهای مختلفی انجام شود:
1- استفاده از متد validate در کنترلر
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8'
]);
این روش برای اعتبارسنجی ساده استفاده میشود. اگر دادهها نامعتبر باشند، لاراول بهصورت خودکار یک پاسخ خطا ارسال میکند.
2- استفاده از کلاسهای درخواست سفارشی (Form Request Validation)
برای پروژههای بزرگ، بهتر است قوانین اعتبارسنجی را در یک کلاس مجزا تعریف کنید:
php artisan make:request RegisterRequest
سپس در کلاس ایجاد شده، قوانین را در متد rules مشخص کنید.
public function rules(): array
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
ایجاد قوانین سفارشی (Custom Rules)
علاوه بر قوانین پیشفرض لاراول، میتوان قوانین سفارشی نیز ایجاد کرد. این ویژگی زمانی مفید است که نیاز به اعتبارسنجی خاصی داشته باشید که در قوانین پیشفرض موجود نیست.
php artisan make:rule ValidUsername
در کلاس ValidUsername میتوان منطق اعتبارسنجی را تعریف و در پروژه استفاده کرد.
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (strtoupper($value) !== $value) {
$fail('The :attribute must be uppercase.');
}
}
سفارشیسازی پیامهای خطا
لاراول به شما اجازه میدهد تا پیامهای خطای اعتبارسنجی را شخصیسازی کنید:
$messages = [
'email.required' => 'Entering an email is required.',
'password.min' => 'The password must be at least 8 characters.',
];
$request->validate($rules, $messages);
این ویژگی برای چندزبانه کردن پیامهای خطا نیز بسیار مفید است.
سیستم اعتبارسنجی در لاراول بسیار قدرتمند، انعطافپذیر و ساده است. با استفاده از روشهای مختلف مانند Form Request Validation، Custom Rules و شخصیسازی پیامهای خطا، میتوان دادههای ورودی را به شکلی بهینه مدیریت کرد و از بروز خطاهای امنیتی و عملکردی جلوگیری کرد.
در پستهای بعدی، به بررسی دقیقتر ساختار ولیدیشنها و نحوهی پیادهسازی قوانین سفارشی میپردازیم.
#laravel #لاراول #فصل_۶
@AmirhDeveloper
.