【发布时间】:2017-07-07 08:56:16
【问题描述】:
我有一个“复杂”的 symfony 表单,让用户可以在现有地址之间进行选择或填写新地址。有 3 种表单类型:
- AddressFieldsType,处理邮政编码等地址字段。
- AddressIdType,允许用户通过输入其 ID 来选择数据库中现有的地址。是的,这不是用户友好的。是的,这只是出于解释原因,在实际情况下我有一个选择。
- 结合了两种形式的AddressType
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]: 地址[地址字段][邮编]:
我明白了:
->这是正确的,约束错误位于导致错误的字段旁边
问题:
使用此代码:
// 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]: 地址[地址字段][邮编]:
我明白了:
->不正确,约束错误在表单之上
当然:
在实际项目中我必须使用带注释的约束,因为它们被其他形式使用。
【问题讨论】:
标签: php forms validation annotations symfony