В Laravel для валидации данных на основе других данных можно использовать механизм правил валидации и условные правила. Позволяют они определить кастомные правила валидации и проверять значения полей на основе значений других полей.
Для начала, давайте определим кастомное правило валидации, которое будет основываться на других данных. В Laravel это делается путем создания нового класса правила в папке app/Rules
. Например, создадим класс CheckOtherDataRule
:
<?php namespace AppRules; use IlluminateContractsValidationRule; class CheckOtherDataRule implements Rule { protected $otherField; public function __construct($otherField) { $this->otherField = $otherField; } public function passes($attribute, $value) { // Реализация вашей логики проверки на основе других данных $otherValue = request()->input($this->otherField); // возвращаем результат проверки return $value == $otherValue; } public function message() { return 'Значение поля :attribute должно быть равно значению поля ' . $this->otherField; } }
В данном примере класс CheckOtherDataRule
реализует интерфейс Rule
и содержит методы passes
, message
и конструктор. Метод passes
выполняет проверку на основе других данных, а метод message
задает сообщение, которое будет выводиться при неудачной валидации.
После создания класса правила, мы можем использовать его в правилах валидации для полей. Например, предположим, что у нас есть форма с двумя полями password
и confirm_password
, и мы хотим проверить, чтобы значение поля password
было равно значению поля confirm_password
. Мы можем определить такие правила валидации:
$rules = [ 'password' => ['required', 'string', new CheckOtherDataRule('confirm_password')], 'confirm_password' => ['required', 'string'] ]; $validator = Validator::make($data, $rules); if ($validator->fails()) { // обработка ошибок валидации }
В данном примере мы определяем правило валидации CheckOtherDataRule
для поля password
и указываем, что оно должно принимать значение из поля confirm_password
.
Таким образом, мы использовали механизм кастомных правил валидации Laravel и условные правила, чтобы валидировать данные на основе других данных. Это позволяет нам гибко контролировать и проверять значения полей в форме.