2012-10-22 32 views
1

假設我們有一個包含3個複選框(A,B,C)的Symfony2表單,並且我們希望用戶勾選至少一個複選框以驗證表單,所以任何組合([A],[B],[ C],[A,B],[A,C],[B,C],[A,B,C])將返回true,並且沒有選擇[]返回false。在Symfony2中一次驗證多個複選框的正確方法是什麼?

在Doctrine對象上使用Symfony驗證器來達到這一目標的正確方法是什麼?

編輯
每個複選框被映射到它自己的列中使用Doctrine @ORM\Column(type="boolean")

回答

1

問題解決了。基於Symfony2 Class Constraint Validator documentationAdded info on changes to setting validation subpath to UPGRADE-2.1.md

在我的實體類,我添加了

class Message 
{ 

    // ... 

    // check if user selected at least one network to publish the message 
    public function isNetworkSelected(ExecutionContext $context) 
    { 
    if (!$this->network_twitter && !$this->network_facebook && !$this->network_googleplus) 
    { 
     $context->addViolationAtSubPath('network_facebook', 'Please select at least one network', array(), null); 
    } 
    } 

    // ... 

} 

validation.yml

MY\MessageBundle\Entity\Message 
    constraints: 
     - Callback: 
      methods: [isNetworkSelected] 
0

你有一個按鈕控制數據庫?如果是這樣,在點擊事件上,檢查是否有選擇,如果是,返回true,否則返回false。

+0

噢,對不起,也許我的問題還不夠清楚(我已編輯)。我的意思是驗證使用Symfony2框架,而不是Javascript。 –

2

如果你正確地使用您的選項列表中選擇字段類型,你可以使用ChoiceValidator

@Assert\Choice(min=1, minMessage = "You must choose at least one option.") 

docs

如果多個選項爲真,則您可以使用min選項強制選擇至少XX個值。例如,如果min爲3,但輸入數組只包含2個有效項目,則驗證將失敗。

+0

對不起,沒有指定:每個複選框映射到它自己的數據庫中的字段(只是更新了問題)。另外,我想我找到了解決方案,很快就會發布。 –

相關問題