اعتبار سنجی در لاراول برای چندین شرط در required_if
همونطور که میدونید، بخش اعتبارسنجی لاراول برای درخواست ها خیلی بهمون کمک میکنه تا اطلاعات از چیزی که ما میخوایم، خارج نباشه. موارد زیادی از اعتبارسنجی توی سایت laravel هست. ولی گاهی پیش میاد که ما اعتبارسنجی پیچیده تری نیاز داریم و با موارد پیشفرض به سادگی قابل انجام نیست. توی این مقاله، یک مثال از این نوع رو میبینیم.
من در لاراول یک قاعدهی ولیدیت دارم به این شکل:
'code_price' => ['nullable', 'required_if:type,APP_CODE,BRANCH_CODE']
ولی میخوام بخش required_if
دو شرط داشته باشه، مثلا در قسمت required_if
که type
برابر APP_CODE
یا BRANCH_CODE
باشد و type_for_code
برابر code_price
باشه. برای این منظور، میتونیم از قاعدهی ولیدیت 'required_if
' که در لاراول وجود داره استفاده کنیم و شرطهای بیشتری را به آن اضافه کنیم. به عنوان مثال، میتونیم از کد زیر برای این ولیدیت استفاده کنیم:
'code_price' => [
'nullable',
function ($attribute, $value, $fail) {
$type = request()->input('type');
$type_for_code = request()->input('type_for_code');
if (($type == 'APP_CODE' || $type == 'BRANCH_CODE') && $type_for_code == 'code_price') {
if (empty($value)) {
$fail('فیلد code_price در صورتی که type برابر APP_CODE یا BRANCH_CODE باشد و همچنین type_for_code برابر code_price باشد، الزامی است.');
}
}
}
],
در این حالت، یک closure
به عنوان ولیدیت به کلید 'code_price'
اضافه شده است. در این closure
، مقدار ولیدیت شده به عنوان پارامتر دوم به نام $value
دریافت میشود. سپس مقدار دو پارامتر 'type'
و 'type_for_code'
از درخواست استخراج شده و شرطهای لازم بررسی میشوند. اگر شرطها برقرار نباشند، با فراخوانی تابع $fail
پیام خطا بازگشت داده میشود. در غیر اینصورت، ولیدیت با موفقیت اجرا میشود و هیچ پیام خطایی نمایش داده نمیشود.