Symfony 表单字段即使有错误也有效吗?

Symfony Form Field Valid Even With Errors?

我已将表单错误应用于表单集合字段(自定义字段集)。

if ($this->isFieldset($form, $field) && !empty($error)) {
    $form->get($field)->addError(
        new FormError(
            ucfirst(str_replace('_', ' ', $field)) . ' is invalid.')
        );
}

表单应用了错误但仍标记为有效?

正如您在控制器中看到的那样,在调用 isValid 之前,表单在 about_you 子项上有错误?

有什么建议吗?

我仔细研究了代码并找到了这个片段:

public function buildView(FormView $view, FormInterface $form, array $options)
{
   //...

    $view->vars = array_replace($view->vars, array(
        'errors' => $form->getErrors(),
        'valid' => $form->isSubmitted() ? $form->isValid() : true,  //<=== HERE
        'value' => $form->getViewData(),
        'data' => $form->getNormData(),
        'required' => $form->isRequired(),
        'size' => null,
        'label_attr' => $options['label_attr'],
        'compound' => $form->getConfig()->getCompound(),
        'method' => $form->getConfig()->getMethod(),
        'action' => $form->getConfig()->getAction(),
        'submitted' => $form->isSubmitted(),
    ));
}

这似乎是唯一设置valid的地方。请注意,它发生在 buildView 期间!之后的一切都不会影响 valid.

的值

然而,并非一切都是徒劳的,因为您可以简单地使用 $form->isValid() 检查表单是否 当前 有效,正如我们在以下代码段中看到的:

public function isValid()
{
    if (!$this->submitted) {
        return false;
    }

    if ($this->isDisabled()) {
        return true;
    }

    return 0 === count($this->getErrors(true));
}