【问题标题】:Get form validation errors in Symfony 2.7 as a string在 Symfony 2.7 中以字符串形式获取表单验证错误
【发布时间】:2016-09-05 10:04:20
【问题描述】:

我收到了一些表单错误,但我很难理解错误是什么,因此表单无效。我正在使用 Symfony 2.7 并使用错误;

$errors = $form->getErrors(true, true);

我希望将它们作为字符串传递给我们的日志记录应用程序,但是这些当前以<empty> 的形式出现。

【问题讨论】:

    标签: php validation symfony error-handling


    【解决方案1】:

    试试这个(string)$form->getErrors(),否则如果你不把它转换成一个字符串,这将是一个长得吓人的数组,乍一看可能没有意义。

    如果你想知道已经发生的错误总数,使用这个,

    $form->count($form->getErrors())

    【讨论】:

      【解决方案2】:

      可以试试

      $form->getErrorsAsString()
      

      当无法从表单中检索错误时(主要是嵌套多个表单时),我使用以下 2 个自定义 utils 函数:

      public function getErrorMessagesFromUnbubblingForm(\Symfony\Component\Form\FormInterface $form)
      {
          $errors = array();
          foreach ($form->getErrors() as $key => $error) {
              $template = $error->getMessageTemplate();
              $parameters = $error->getMessageParameters();
      
              foreach ($parameters as $var => $value) {
                  $template = str_replace($var, $value, $template);
              }
      
              $errors[$key] = $template;
          }
          if ($form->count()) {
              foreach ($form as $child) {
                  if (!$child->isValid()) {
                      $errors[$child->getName()] = $this->getErrorMessagesFromUnbubblingForm($child);
                  }
              }
          }
          return $errors;
      }
      
      public function getFlatErrorMessagesFromUnbubblingForm(\Symfony\Component\Form\FormInterface $form)
      {
          $errors = array();
          foreach ($form->getErrors() as $error) {
              $template = $error->getMessageTemplate();
              $parameters = $error->getMessageParameters();
      
              foreach ($parameters as $var => $value) {
                  $template = str_replace($var, $value, $template);
              }
      
              $errors[] = $template;
          }
          if ($form->count()) {
              foreach ($form as $child) {
                  if (!$child->isValid()) {
                      $errors = $this->getFlatErrorMessagesFromUnbubblingForm($child);
                  }
              }
          }
          return $errors;
      }
      

      【讨论】:

      • $form->getErrorsAsString() 已被弃用,不是吗?
      • 正确,自 2.5 起已弃用,已在 3.0 中删除。根据文档,请改用 getErrors() 并将结果转换为字符串。我的坏我正在使用 2.3
      猜你喜欢
      • 2011-10-25
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2019-06-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多