我已将表单错误应用于表单集合字段(自定义字段集)。
if ($this->isFieldset($form, $field) && !empty($error)) {
$form->get($field)->addError(
new FormError(
ucfirst(str_replace('_', ' ', $field)) . ' is invalid.')
);
}
表单是否已应用错误但仍标记为有效?
正如您在控制器中看到的那样,在调用isValid之前,表单在about_you子上有错误?
有什么建议吗?
答案 0 :(得分:2)
我挖掘了代码并找到了这个片段:
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));
}