TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #388 342
فصل شش - Requests and Response

بخش دوم - اعتبارسنجی درخواست ها


اعتبارسنجی ها عمدتا به 3 روش انجام می شوند. در این پست به 2 روش آن اشاره می شود و روش سوم در پست های بعدی کامل بررسی خواهد شد.

یکی از روش های مرسوم اعتبارسنجی بر روی درخواست ها (ورودی ها POST، GET و...) فراخوانی متد validate از متغیر $request می باشد.
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
}


کد بالا درخواست ما را اعتبارسنجی می کند، به عنوان مثال، مقدار input با نام title باید required، unique و طول حداکثر 255 کاراکتر داشته باشد.
اگر همه این ویژگی ها را داشته باشد اعتبارسنجی درخواست موفقیت آمیز بوده، در غیر اینصورت یک آرایه از error ها ایجاد می شود.

روش دیگر اعتبارسنجی استفاده از فساد Validator است:
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);


کد بالا همانند روش اول است، با این تفاوت که می توان اعتبارسنجی را روی داده های دلخواه (پارامتر اول متد make که برابر تمامی ورودی های درخواست قرار کرفته) انجام داد.

هر دو روش مرسوم و پرکاربرد هستند که بسته به نیاز استفاده می شوند.

پس از انجام اعتبار سنجی یک شئ از Validator باز می گردد که متدهایی در اختیار ما می گذارد، در ادامه به بررسی آنها خواهیم پرداخت.

1- متد fails
این متد بررسی می‌کند که آیا عملیات اعتبارسنجی شکست خورده یا نه.
if ($validator->fails()) {
return response('fails');
}


2- متد validated
اگر اعتبارسنجی موفقیت‌آمیز باشد، این متد فقط داده‌های معتبر (validated) را بازمی‌گرداند. این روش، داده‌های تاییدشده را فیلتر می‌کند.
$validated = $validator->validated();


3- متد stopOnFirstFailure
اگر بخواهید عملیات اعتبارسنجی به‌محض اولین خطا متوقف شود، از این متد استفاده می‌کنید.
$validator = Validator::make($request->all(), [
'name' => 'required',
])->stopOnFirstFailure();


4- متد validate
مقدار اعتبارسنجی‌شده را باز می‌گرداند یا اگر خطایی وجود داشته باشد، به‌صورت خودکار ValidationException پرتاب می‌کند. معمولاً در کنترلر استفاده می‌شود.
$validated = $request->validate([
'name' => 'required',
]);

در این حالت اگر فیلدی نامعتبر باشد، لاراول به‌صورت خودکار به صفحه قبل برمی‌گردد و خطاها را نمایش می‌دهد.

5- متد validateWithBag
مشابه validate() است ولی خطاها را داخل یک Error Bag خاص ذخیره می‌کند. برای مثال وقتی چند فرم در یک صفحه داریم و هرکدام باید خطاهای جداگانه داشته باشند.
$request->validateWithBag('updateProfile', [
'name' => 'required',
]);

درصورت بروز خطا، ارورها در یک Bag با نام updateProfile ذخیره می شوند.

6- متد after
پس از اجرای تمام قوانین اعتبارسنجی، می‌توانید با این متد، اعتبارسنجی‌های سفارشی اضافه کنید.
$validator->after(function ($validator) use ($request) {
if ($request->password !== $request->confirm_password) {
$validator->errors()->add('confirm_password', 'Password is incorrect.');
}
});


7- متد errors
لیست خطاهای اعتبارسنجی را باز می‌گرداند، معمولاً در ترکیب با fails() استفاده می‌شود.
$errors = $validator->errors();


8- متد sometimes
اجرا شدن قوانین اعتبارسنجی را وابسته به شرط خاصی می‌کند.

$validator->sometimes('email', 'required', function ($input) {
return $input->subscribe == true;
});

در این مثال، اگر مقدار subscribe برابر با true باشد، فیلد email اجباری خواهد شد.

متد های دیگری نیز وجود دارد که شامل آموزش نخواهد شد.

درصوتی که یک اعتبارسنجی ناموفق باشد، خطا ها در متغیر $errors در سمت Blade در دسترس خواهد گرفت.
به عنوان مثال:
@if ($errors->any())
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
@endif

کد بالا درصورت وجود خطا اعتبارسنجی، خطا آنها را به کاربر نمایش می دهد.

همچنین می توان از دایرکتیو @error استفاده کنید:
@error('title')
<div class="alert alert-danger">{{ $message }}</div>
@enderror

این کد در صورتی که اینپوت title با خطا مواجه شود، متن خطای آن را به کاربر نمایش می دهد.

اگر نیاز به خطا ها از یک Bag خاص داشتید می توانید پارامتر دوم را نیز کامل کنید:
@error('title', 'myBag')


تا این بخش با روش اعتبارسنجی درخواست ها و نمایش خطاهای آن آشنا شدید، در قسمت های بعدی با Ruleهای اعتبارسنجی (required|unique|...) آشنا خواهیم شد.

#laravel #لاراول #فصل_۶
@AmirhDeveloper
.
  • ❤ 3
  • 🍓 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
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 →