在我的Symfony2應用程序中,我有一個具有2個子表單的訂閱使用相同的實體地址。 我正在尋找解決方案來驗證第二個窗體只有當複選框未選中。由於子表單屬於同一實體,所以驗證約束是相同的。斷言\有效的實體cannont採取組參數,這樣我就可以「T使用此解決方案。2具有不同驗證的相同實體的子表單Symfony2
SubscriptionType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('billingAddress', new AddressType())
->add('shippingSame', 'checkbox', array(
'mapped' => false,
'data' => true,
))
->add('shippingAddress', new AddressType())
;
}
Adress.php實體
class Address
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=255, nullable=false)
* @Assert\NotBlank()
*/
private $firstname;
/**
* @var string
*
* @ORM\Column(name="line1", type="string", length=255, nullable=false)
* @Assert\NotBlank()
*/
private $line1;
}
Suscription.php Entiry
class Subscription
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Shop\Address")
* @ORM\JoinColumn(nullable=false)
*/
private $billingAddress;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Shop\Address")
* @ORM\JoinColumn(nullable=false)
*/
private $shippingAddress;
}
所以,我想驗證第二個地址只有當未映射的複選框未選中。
感謝您的幫助!
感謝您的解決方案,但由於實體是同爲2子窗體時,確認團組將是相同的(因爲定義在實體類註釋),所以我們可以我認爲不要使用groups_validation。 – Nbalive16
Hi @ Nbalive16與文檔[您可以根據提交的數據更改羣組](http://symfony.com/doc/current/book/forms.html#validation-groups)手風琴,我經常使用此功能。順便說一句,回調方法也是一個解決方案。 – Matteo
是的,我們可以根據數據更改組,但組是使用註釋定義到實體類文件中的。由於我的實體(以及我的領域)對於2個子表單是相同的,因此定義和使用2個不同的組是不可能的。無論如何,非常感謝您的幫助;) – Nbalive16