Return True - اعتبار سنجی در لاراول برای چندین شرط در required_if

اعتبار سنجی در لاراول برای چندین شرط در 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 پیام خطا بازگشت داده می‌شود. در غیر اینصورت، ولیدیت با موفقیت اجرا می‌شود و هیچ پیام خطایی نمایش داده نمی‌شود.

نظرات