在Symfony 2.7中以字符串形式获取表单验证错误

时间:2016-05-10 12:18:08

标签: php validation symfony error-handling

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

获取错误
$errors = $form->getErrors(true, true);

我希望它们是一个字符串,所以我可以将它们传递给我们的日志记录应用程序,但是这些目前正以<empty>形式传递。

2 个答案:

答案 0 :(得分:0)

试试这个(string)$form->getErrors(),否则如果你不把它投射到一个字符串上,它将是一个令人恐惧的阵列,乍一看可能毫无意义。

如果您想知道已发生的错误总数,请使用此

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

答案 1 :(得分:-1)

也许试试

$form->getErrorsAsString()

当从表单中检索错误(主要是嵌套多个表单时)时,我使用这两个自定义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;
}