我通过代码挖掘,发现这个片断:
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));
}
你以前添加您的阵列或者调用'$ form-> isValid()'后? –
是的,当我第一次创建窗体时,我添加了它们(在重写的窗体因子类中,它从Redis中提取错误并将它们添加回窗体)。 – Kal
您是否尝试为自定义字段集编写测试或仅从该字段创建表单,然后在控制器中调用getErrors()/ isValid()? – dbrumann