#laravel #forms #validation #request
#laravel #формы #проверка #запрос
Вопрос:
Как правильно проверить, что параметр в запросе должен быть в следующем формате: массив с ключом определенного значения и логическое значение:
"countries" => array:2 [
"usa" => true
"canada" => true
]
В моем запросе формы у меня есть следующее правило:
public function rules()
{
return [
'countries' => ['bail', 'array'],
'countries.*' => ['string', new ValidateCountries],
'countries.*.' => ['boolean'],
];
}
Мой ValidateCountries
passes()
метод:
public function passes($attribute, $value)
{
$countries = ["usa", "canada", "uk", "france"];
return in_array(strtolower($value), $countries);
}
Комментарии:
1. что
ValidateCountries
делает?2. это обычай
Rule
сpasses()
описанным выше методом. в основном проверяется, находится ли значение в массиве. …. и, просто записав это, я вижу, что я должен манипулировать$attribtute
параметромpasses()
вместо$value
3. примените это пользовательское правило к
countries
значениям массива, которые вы пытаетесь проверить… и в этом правиле получите ключи из массива и выполните проверку каждого из них4. если бы вы хотели использовать
countries.*
, у вас был бы один из тех, который проверял бы ‘boolean’, но вам также понадобилось бы пользовательское правило, которое проверяло бы атрибут, чтобы увидеть, находится ли он в том статическом массиве, который вы проверяете5. понял. отправка ответа сейчас
Ответ №1:
Получил его, обратившись к $attribute
параметру вместо $value
. Простой, но мой мозг поджарен.
public function passes($attribute, $value)
{
$attribute = explode(".", $attribute)[1];
$countries = ["usa", "canada", "france", "uk"];
return in_array(strtolower($attribute), $countries);
}
Комментарии:
1. может
last(explode('.', $attribute)
быть, на случай, если в будущем у вас будет другой уровень вложенности?