【发布时间】:2014-08-17 15:01:20
【问题描述】:
我在 symfony 2.3 中构建了一个表单。其中显示并保存此配置文件的用户配置文件和地址。 我有两个实体。一个用户和一个地址实体。 (我只展示部分代码,这里代码不完整)
用户实体:
/**
* @ORM\Entity
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="Ebm\UserBundle\Entity\UserRepository")
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*/
protected $firstName;
/**
* @ORM\Column(type="string", length=255)
*/
protected $lastName;
/**
* @ORM\Column(type="string", length=255, unique=true)
*/
private $username;
/**
* @var \Doctrine\Common\Collections\Collection
* @Assert\Valid
* @ORM\ManyToMany(targetEntity="Ebm\UserBundle\Entity\Address", cascade={"persist", "remove"})
* @ORM\JoinTable(name="user_address",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="address_id", referencedColumnName="id")}
* )
*/
protected $addresses;
}
地址实体:
/**
* @ORM\Entity
* @ORM\Table(name="address")
*/
class Address
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*/
protected $street;
}
以及将地址实体作为集合嵌入到用户表单“usertype”中的表单。
用户类型:
class UserType extends AbstractType
{
protected $securityContext;
public function __construct(SecurityContext $securityContext)
{
$this->securityContext = $securityContext;
}
/**
* (non-PHPdoc)
* @see \Symfony\Component\Form\AbstractType::buildForm()
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->->add('addresses', 'collection', array(
'type' => new AddressType() ,
'allow_add' => true,
'allow_delete' => true,
'label' => false,
'cascade_validation' => true)
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Ebm\UserBundle\Entity\User',
'cascade_validation' => true,
));
}
public function getName()
{
return 'user';
}
}
在我的控制器中,验证部分如下所示:
$form = $this->createForm($this->get('form.type.user'), $user)->add('save', 'submit');
// On initial page load handleRequest() recognizes that the form was not submitted and does nothing
// isValid returns false
$form->handleRequest($request);
// Check if form isValid
if ($form->isValid()) {
}
而我的验证 yml (UserBundle/config/validation.yml) 文件看起来像这样
Ebm\UserBundle\Entity\User:
properties:
firstName:
- NotBlank: ~
- Length:
max: 255
addresses:
- Valid: ~
Ebm\UserBundle\Entity\Address:
properties:
street:
- NotBlank: { message: "validate.not_blank" }
- Type:
type: string
- Length:
max: 255
如果地址字段是 emtyp "street" 作为示例,则不会发生错误。只有验证错误 显示实体“用户”。
我一周以来一直在寻找解决方案,如果有人可以帮助我,我将非常幸运
【问题讨论】:
-
我认为验证是正确的,但它没有显示来自嵌入集合的错误消息?有没有人有想法?
标签: validation symfony