Как проверить ключи массива с помощью запроса формы Laravel?

#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) быть, на случай, если в будущем у вас будет другой уровень вложенности?