Проверка даты на основе массива Laravel after_or_equal несколько дат?

Я импортирую файл Excel в коллекции с помощью пакета laravel-excel. Я пытаюсь проверить поле даты reporting_date так, чтобы это after_or_equal два других поля даты registered_date и analysis_date. Только с одним полем даты after_or_equal все это работает нормально. Я динамически заполняю правила и массив пользовательских сообщений. Правила применяются правильно, но у меня проблема с переопределением сообщения по умолчанию пользовательским сообщением для этой конкретной проверки, и вместо этого отображается сообщение по умолчанию.

public function collection(Collection $rows) { $data = $rows->toArray(); $rules = [Some static rules defined]; $messages = []; foreach ($data as $key => $val){ /*Adding [complex/]conditional rules and messages.*/ … … if(!empty($val[‘reporting_date’])){ $rules = array_merge($rules, [$key.’.reporting_date’ => [‘sometimes’, ‘nullable’, ‘date’, ‘after_or_equal:’.$key.’.registered_date,’, ‘after_or_equal:’.$key.’.analysis_date’]]); $messages[«$key.reporting_date.date»] = «Error on row: <strong>».($key+2).»</strong>. The reporting_date <strong>».(Arr::exists($val, «reporting_date»)?$val[‘reporting_date’]:»»). «</strong> is not a valid date.»; /****These messages are not overriding the default message.****/ $messages[«$key.reporting_date.after_or_equal.$key.registered_date»] = «Error on row: <strong>».($key+2).»</strong>. The reporting_date <strong>».(Arr::exists($val, «reporting_date»)?$val[‘reporting_date’]:»»). «</strong> must be a date after or equal to registered_date <strong>».(Arr::exists($val, «registered_date»)?$val[‘registered_date’]:»»). «</strong>.»; $messages[«$key.reporting_date.after_or_equal.$key.analysis_date»] = «Error on row: <strong>».($key+2).»</strong>. The reporting_date <strong>».(Arr::exists($val, «reporting_date»)?$val[‘reporting_date’]:»»). «</strong> must be a date after or equal to analysis_date <strong>».(Arr::exists($val, «analysis_date»)?$val[‘analysis_date’]:»»). «</strong>.»; … … } } }

Вместо этого я получаю сообщение

The 0.reporting_date must be a date after or equal to 0.registered_date. The 0.reporting_date must be a date after or equal to 0.analysis_date.

Правило проверки:

«0.reporting_date» => array:5 [▼ 0 => «sometimes» 1 => «nullable» 2 => «date» 3 => «after_or_equal:0.registered_date,» 4 => «after_or_equal:0.analysis_date» ]

Я подозреваю, что я не назначаю сообщение правильному ключу массива и, следовательно, не вижу настраиваемого сообщения. Сейчас он назначен так, и я хочу, чтобы это сообщение отображалось.

«0.reporting_date.after_or_equal.0.registered_date» => «Error on row: 2. The reporting_date 2020-09-08 must be a date after or equal to registered_date 2020-09-12.» «0.reporting_date.after_or_equal.0.analysis_date» => «Error on row: 2. The reporting_date 2020-09-08 must be a date after or equal to analysis_date 2020-09-14.»

Также при отладке сообщения об ошибке.

dd($validator->errors()); 0.reporting_date» => array:2 [▼ 0 => «The 0.reporting_date must be a date after or equal to 0.registered_date.» 1 => «The 0.reporting_date must be a date after or equal to 0.analysis_date.» ]

При проверке, как правило, при первой ошибке вы будете перенаправлены обратно. Чтобы избежать этого, вы можете разделить механизм проверки на 2 или более этапов. Не уверен, что вы это понимаете, но вы можете сделать что-то вроде: validate- ›this. затем подтвердите- ›это …. затем сохраните / обновите материал.   —  person SASM    schedule 25.01.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!