2

我对 Symfony 相当陌生。我编写了以下代码来验证并在验证失败时返回错误消息。但我只能得到错误消息,而不是验证失败的字段。下面是我的代码:

if ($request->isXmlHttpRequest()) {

        if ($form->isValid()) {
            //do something here
        }

        $errors = $this->get('my_form')->getErrorMessages($form);
        return new JsonResponse(['errors' => $errors], 400);
}

有人可以告诉我如何获取字段名称以及错误消息。

谢谢

4

2 回答 2

2

为了获取表单的所有错误,$form->getErrors($deep=true, $flatten=true)因此将错误转换为名称为字段名称和键为消息的数组将类似于:

$errors = $form->getErrors(true, true);
$errorArray = array();
foreach($errors as $e){
  //get the field that caused the error
  $field = $e->getOrigin();
  $errorArray[$field->getName()] = isset($errorArray[$field->getName()]) ? $errorArray[$field->getName()] : array();
  $errorArray[$field->getName()][] = $e->getMessage();
}
于 2015-08-01T05:56:08.660 回答
1

这是我使用的一个功能:

  /**
   * Get errors from form.
   *
   * @param \Symfony\Component\Form\FormInterface $form
   * @return array
   */
  private function getErrorsFromForm(FormInterface $form)
  {
    $errors = array();
    foreach ($form->getErrors() as $error) {
      $errors[] = $error->getMessage();
    }

    foreach ($form->all() as $childForm) {
      if ($childForm instanceof FormInterface) {
        if ($childErrors = $this->getErrorsFromForm($childForm)) {
          $errors[$childForm->getName()] = $childErrors;
        }
      }
    }

    return $errors;
  }
于 2015-08-01T14:14:13.110 回答