我有一个'复杂'的symfony表单,让用户可以在现有地址之间进行选择或填写新地址。有3种表单类型:
AddressType应该从/到地址获取/设置,但是它自己的表单描述与数据不匹配,因此有data transformer将地址转换为例外数据数组格式。
我做了一个完整的symfony项目来解释这个问题: https://github.com/ruben-podadera/tmp-sf-form-issue
使用此代码:
// src/AppBundle/Entity/Address.php
...
class Address
{
public $id;
public $zipCode;
}
// src/AppBundle/Form/AddressFieldsType.php
...
class AddressFieldsType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('zipCode', TextType::class, [
'constraints' => [new NotBlank()]
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Address::class
]);
}
}
我提交空数据: 地址[ADDRESS_ID]: 地址[address_fields] [邮编]:
我明白了:
- >这是正确的,约束错误位于导致错误的字段旁边
使用此代码:
// src/AppBundle/Entity/Address.php
...
use Symfony\Component\Validator\Constraints as Assert;
class Address
{
public $id;
/**
* @Assert\NotBlank()
*/
public $zipCode;
}
// src/AppBundle/Form/AddressFieldsType.php
...
class AddressFieldsType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('zipCode', TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Address::class
]);
}
}
我提交空数据: 地址[ADDRESS_ID]: 地址[address_fields] [邮编]:
我明白了:
- >不正确,约束错误位于表单
之上在实际项目中,我必须使用带注释的约束,因为它们被其他形式使用。
答案 0 :(得分:1)
您可以像这样手动格式化表单行:
<div>
{{ form_label(form.zipCode) }}
{{ form_errors(form.zipCode) }} {# This field will show the error if any #}
{{ form_widget(form.zipCode) }}
</div>
或者这样:
{{ form_row(form.zipCode) }}
无论如何,您的问题必须在模板的格式化中。