Для проверки, что массив является ассоциативным с помощью Symfony Assert, вы можете использовать аннотацию @Collection вместе с аннотацией @AssertAll.
Прежде всего, убедитесь, что у вас установлен компонент Assert Symfony с помощью Composer. Если он не установлен, вы можете добавить его в ваш файл composer.json следующим образом:
"require": { "symfony/validator": "^4.4" }
После этого запустите composer update
, чтобы установить или обновить компоненты.
Теперь вы можете создать класс для проверки вашего массива. Создайте новый класс и добавьте в него следующее содержимое:
use SymfonyComponentValidatorConstraints as Assert; class ArrayValidator { /** * @AssertCollection( * fields = { * "key" = @AssertType("string"), * "value" = @AssertType("string") * }, * allowExtraFields = true * ) */ protected $array; /** * Set the array to be validated * * @param array $array */ public function setArray(array $array) { $this->array = $array; } /** * Validate the array * * @return array|null */ public function validate() { $validator = Validation::createValidator(); $violations = $validator->validate($this); if (count($violations) > 0) { $errors = []; foreach ($violations as $violation) { $errors[$violation->getPropertyPath()] = $violation->getMessage(); } return $errors; } return null; } }
В этом классе мы определяем свойство $array
, которое будет содержать массив, который нужно проверить. Мы использовали аннотацию @AssertCollection
, чтобы указать, что мы ожидаем массив. Внутри этой аннотации мы указываем два поля: key
и value
. Поскольку мы хотим, чтобы оба ключ и значение были строками, мы используем аннотацию @AssertType("string")
.
Также обратите внимание на параметр allowExtraFields = true
, который позволяет массиву содержать дополнительные поля, которые не определены в аннотации.
Метод validate()
использует компонент Validator Symfony для выполнения фактической проверки. Если найдены нарушения, он вернет массив ошибок, иначе вернет null
.
Вы можете использовать этот класс следующим образом:
$array = [ ["key" => "name", "value" => "John"], ["key" => "age", "value" => "30"], ["key" => "city", "value" => "New York"] ]; $validator = new ArrayValidator(); $validator->setArray($array); $errors = $validator->validate(); if ($errors) { // Обрабатываем ошибки } else { // Массив валиден }
Это подробный ответ на вопрос о проверке, что массив является ассоциативным с помощью Symfony Assert. Надеюсь, это поможет вам разобраться в использовании Symfony Assert для проверки ваших массивов.