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));
}
我已将表单错误应用于表单集合字段(自定义字段集)。
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));
}