我有一个地址实体,我希望在注册时验证不同,而不是在我登录时验证“更改地址”。
这是我的地址实体:
/**
* Address
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="BooksProj\UserBundle\Entity\AddressRepository")
* @CustomAssert\AddressChange(groups={"AddressChange"})
*/
class Address
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var User
*
* @ORM\OneToOne(targetEntity="User", mappedBy="address")
*/
protected $user;
/**
* @var string
*
* @ORM\Column(name="state", type="string", length=255)
*
* @Assert\NotBlank()
* @Assert\Length(min=2, max=50)
*/
private $state;
/**
* @var string
*
* @ORM\Column(name="city", type="string", length=255)
*
* @Assert\NotBlank()
* @Assert\Length(min=2, max=50)
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="zipcode", type="string", length=255)
*
* @Assert\NotBlank()
* @Assert\Length(min=2, max=50)
*/
private $zipcode;
/**
* @var string
*
* @ORM\Column(name="country", type="string", length=255)
* @Assert\NotBlank()
*/
private $country;
// ...
}
当用户注册时,我不希望验证组“AddressChange”。 当有人更改其地址时,我希望验证“默认”和“地址更改”组。
为此,我现在在AddressFormType中有以下内容:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
if ($this->securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
$resolver->setDefaults(array(
'data_class' => 'BooksProj\UserBundle\Entity\Address',
'validation_groups' => array('Default', 'AddressChange'),
));
}else{
$resolver->setDefaults(array(
'data_class' => 'BooksProj\UserBundle\Entity\Address',
));
}
}
这是处理我目的的唯一方法吗? 或者我可以传递组,在调用时应该在我的ChangeAddressFormHandler中验证:
if ($this->form->isValid())
{ ....}
不知怎的?
我认为我现在得到的解决方案并不是最好的。 问候。
答案 0 :(得分:0)
您可以使用validator
服务,只需在第二个参数中传递数组中的验证组。
$validator = $this->get('validator');
$errors = $validator->validate($yourEntity, array('AddressChange', 'Default');
if (count($errors) > 0)
{
$errorsString = (string) $errors;
return new Response($errorsString);
}
return new Response('Form is valid!);
或第二种方式:
$form = $this->createForm(new YourForm(), $yourEntity, array('validation_groups'=>'AddressChange'));
或第三种方式:
$resolver->setDefaults(array(
'data_class' => 'BooksProj\UserBundle\Entity\Address',
'validation_groups' => function(FormInterface $form){
$yourEntity = $form->getData();
if( "Your condition" )
return array('Default', 'AddressChange');
else
return array('Default');
}
));