Пути к свойствам могут отображаться либо на свойства, либо на индексы.Рассмотрим класс OptionBag
, который реализует \ArrayAccess
и метод getSize()
.
- Путь свойства
size
ссылается на $optionBag->getSize()
- Путь свойства
[size]
относится к $optionBag['size']
В вашем случае вы проверяете массив.Поскольку элементы массива также доступны по индексу, результирующий путь свойства в нарушении содержит квадратные скобки.
Обновление:
Вам не нужно удалять квадрат вручнуюскобки.Вы можете использовать компонент PropertyAccess Symfony для сопоставления ошибок с массивом, структура которого совпадает с вашими данными, например:
$collectionConstraint = new Collection(array(
'email' => array(
new NotBlank(),
new Email(),
),
'password' => array(
new NotBlank(),
new MinLength(array('limit' => 6)),
new MaxLength(array('limit' => 25)),
),
));
$data = array(
'email' => $this->getRequest()->get('email'),
'password' => $this->getRequest()->get('password')
);
$violations = $this->get('validator')->validateValue($data, $collectionConstraint);
$errors = array();
$accessor = $this->get('property_accessor');
foreach ($violations as $violation) {
$accessor->setValue($errors, $violation->getPropertyPath(), $violation->getMessage());
}
=> array(
'email' => 'This value should not be blank.',
'password' => 'This value should have 6 characters or more.',
)
Это также работает с многомерными массивами данных.Там пути к свойствам будут выглядеть примерно так: [author][name]
.PropertyAccessor вставит сообщения об ошибках в том же месте в массиве $errors
, то есть $errors['author']['name'] = 'Message'
.