仅显示来自 CollectionType 的错误表单项
Display only form item from a CollectionType with error
在 symfony 4.3 项目中,我有一个表单,其中一个表单元素的 CollectionType 为 lineItems
。表格有效,完成验证。问题是我可能有几十个 lineItem
子表单,所以如果一个 lineItem
验证失败我希望能够只向用户显示失败的项目(并隐藏其他的) .问题是我不知道如何识别哪个 lineItem
失败了,所以我只能渲染它(连同它的错误消息)。
我的代码被缩写以仅显示重要部分。
主要形式:
class TreatmentFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('lineItems', CollectionType::class, [
'entry_type' => LineItemFormType::class,
'label' => 'Item',
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'error_bubbling' => false,
])
// other items omitted
;
}
}
我的子表单:
class LineItemFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('item')
->add('quantity')
->add('itemType');
}
}
和我想访问个别错误的 twig 文件:
<div data-prototype="{{ form_widget(form.lineItems.vars.prototype)|e('html_attr') }}">
{% if form.vars.valid %}
// display data; code not shown
{% else %}
{% for line in form.lineItems %}
// WHAT TO PUT HERE TO IDENTIFY ONLY THE FIELD WITH THE ERROR?
{% endfor %}
{% endif %}
</div>
我确实知道当我提交表单并更正所有字段都必须呈现的错误时,但我并不担心那部分,我只是不知道如何提取 lineItem
验证失败。我已经尝试了很多变体,例如 line.vars.errors
,但没有任何东西让我找到一个失败的元素。
尝试检查每个字段的 line.{field_name}.vars.errors
是否为空,然后呈现您需要的内容。
{% for line in form.lineItems %}
{% if (line.item.vars.errors is not empty) or (line.quantity.vars.errors is not empty) or (line.itemType.vars.errors is not empty) %}
{{ form_row(line.item) }}
{{ form_row(line.quantity) }}
{{ form_row(line.itemType) }}
{% endif %}
{% endfor %}
或者检查 line.vars.valid
是否为假。我的印象是这只存在于父表单中,但我不确定。
https://symfony.com/doc/current/form/form_customization.html
在 symfony 4.3 项目中,我有一个表单,其中一个表单元素的 CollectionType 为 lineItems
。表格有效,完成验证。问题是我可能有几十个 lineItem
子表单,所以如果一个 lineItem
验证失败我希望能够只向用户显示失败的项目(并隐藏其他的) .问题是我不知道如何识别哪个 lineItem
失败了,所以我只能渲染它(连同它的错误消息)。
我的代码被缩写以仅显示重要部分。
主要形式:
class TreatmentFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('lineItems', CollectionType::class, [
'entry_type' => LineItemFormType::class,
'label' => 'Item',
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'error_bubbling' => false,
])
// other items omitted
;
}
}
我的子表单:
class LineItemFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('item')
->add('quantity')
->add('itemType');
}
}
和我想访问个别错误的 twig 文件:
<div data-prototype="{{ form_widget(form.lineItems.vars.prototype)|e('html_attr') }}">
{% if form.vars.valid %}
// display data; code not shown
{% else %}
{% for line in form.lineItems %}
// WHAT TO PUT HERE TO IDENTIFY ONLY THE FIELD WITH THE ERROR?
{% endfor %}
{% endif %}
</div>
我确实知道当我提交表单并更正所有字段都必须呈现的错误时,但我并不担心那部分,我只是不知道如何提取 lineItem
验证失败。我已经尝试了很多变体,例如 line.vars.errors
,但没有任何东西让我找到一个失败的元素。
尝试检查每个字段的 line.{field_name}.vars.errors
是否为空,然后呈现您需要的内容。
{% for line in form.lineItems %}
{% if (line.item.vars.errors is not empty) or (line.quantity.vars.errors is not empty) or (line.itemType.vars.errors is not empty) %}
{{ form_row(line.item) }}
{{ form_row(line.quantity) }}
{{ form_row(line.itemType) }}
{% endif %}
{% endfor %}
或者检查 line.vars.valid
是否为假。我的印象是这只存在于父表单中,但我不确定。
https://symfony.com/doc/current/form/form_customization.html