Чтобы отладить форму, используйте $form->getErrorsAsString()
вместо $form->getErrors()
.
$form->getErrorsAsString()
должен использоваться только для отладки формы ... он будет содержать ошибки каждого дочернего элемента, который не относится к $form->getErrors()
.
Как упоминает Питер, $form->getErrors()
не вернет сумму всех ошибок детских форм.
Чтобы понять, как форма может быть недействительной и иметь getErrors(), возвращающую пустой массив, вы можете посмотреть метод isValid() класса формы symfony. Как вы можете видеть, есть два случая, когда форма недействительна, первый тест для общей формы и второй случайный тест для каждого дочернего элемента.
public function isValid()
{
//...
//CASE I : IF CHILD ELEMENTS HAVE ERRORS, $this->errors WILL CONTAIN
//THE ERROR ON THE CHILD ELEMENT AND NOT ON THE GENERAL 'errors' FIELD
//ITSELF
if (count($this->errors) > 0) {
return false;
}
//CASE II: AND THIS IS WHY WE ARE TESTING THE CHILD ELEMENTS AS WELL
//TO CHECK WHETHER THERE ARE VALID OR NOT
if (!$this->isDisabled()) {
foreach ($this->children as $child) {
if (!$child->isValid()) {
return false;
}
}
}
return true;
}
Поэтому каждая форма ребенок может содержать ошибку, но $form->getErrors()
сама не будет возвращать все ошибки. Учитывая форму, содержащую множество дочерних элементов, вы обычно имеете $ form-> getErrors() с ошибкой CSRF, если CSRF неверен.
Вы можете изменить свой вопрос, включив в него файл validation.xml или аннотации проверки. – MDrollette