【问题标题】:Symfony 2.6 form validation and error messagesSymfony 2.6 表单验证和错误消息
【发布时间】:2015-10-23 20:50:36
【问题描述】:

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

if ($request->isXmlHttpRequest()) {

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

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

谁能告诉我如何获取字段名称以及错误消息。

谢谢

【问题讨论】:

    标签: php symfony symfony-forms symfony-validator


    【解决方案1】:

    为了获取表单的所有错误,请使用$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();
    }
    

    【讨论】:

      【解决方案2】:

      这是我使用的一个函数:

        /**
         * 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;
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-04
        • 2018-03-27
        • 2016-01-06
        • 2017-05-12
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多