2012-07-03 7 views
7

फ़ील्ड users (इकाई प्रकार) के रूप में मेरा फॉर्म। विशिष्टता के लिए मैं सत्यापन कैसे जोड़ सकता हूं कम से कम एक उपयोगकर्ता को चुना जाना चाहिए? असल में मैं एक घटना श्रोता जोड़ने रहा हूँ, लेकिन अगर यह एक कानूनी समाधान है या नहीं मुझे नहीं पता:सिम्फनी 2 में कम से कम एक तत्व (या एन तत्व) का चयन कैसे मान्य करता है?

public function buildForm(\Symfony\Component\Form\FormBuilder $builder, 
    array $options) 
{ 
    $builder 
     ->add('title', 'text', array(
      'label' => 'Titolo' 
     )) 
     ->add('content', 'textarea', array(
      'label' => 'Contenuto' 
     )) 
     ->add('sender_text', 'text', array(
      'label' => 'Mittente testuale', 
     )) 
     ->add('users', 'entity', array(
      'label' => 'Destinatari', 
      'class' => 'DL\FidelityBundle\Entity\User', 
      'property' => 'select_label', 
      'multiple' => true 
     )); 
    ; 

    // Valida il numero di utenti selezionati 
    $builder->addEventListener(\Symfony\Component\Form\FormEvents::POST_BIND, 
     function($event) { 
      $form = $event->getForm(); 
      $data = $event->getData(); 

      if(!$data->users->isEmpty()) return; 

      $msg = 'Occorre specificare almeno un utente destinatario'; 
      $form->get('users')->addError(new FormError($msg)); 
    }); 
} 

उत्तर

0

सत्यापन घटक पर एक नज़र डालें: http://symfony.com/doc/current/book/validation.html

आप के भीतर एक callback constraint लिख सकते हैं वस्तु आप को मान्य करना चाहते हैं:

use Symfony\Component\Validator\ExecutionContext; 

public function isUsersValid(ExecutionContext $context) 
{ 
    if ($this->users->isEmpty()) { 
     $propertyPath = $context->getPropertyPath() . '.users'; 
     $context->setPropertyPath($propertyPath); 
     $context->addViolation('Occorre specificare almeno un utente destinatario', array(), null); 
    } 
} 

अपने संस्था के लिए इस बाधा को जोड़ने का तरीका (इस depens अगर आप एनोटेशन या YAML/xml का उपयोग कर रहे) कॉलबैक बाधा पेज देखें।

+0

लेकिन वस्तु मेरे मामले में एक सिद्धांत संग्रह है ... – gremo

+0

आप '$ डेटा = $ घटना> GetData के साथ अपने घटना श्रोता में डेटा पुन: प्राप्त किया है (); '। मुझे नहीं लगता कि यह एक सिद्धांत संग्रह है? क्या आप टाइप क्लास की 'getDefaultOptions' विधि दिखा सकते हैं? – Sgoettschkes

20

सिम्फनी 2.1 के रूप में, आप Count बाधा का उपयोग कर सकते हैं। यदि आप 2.0 पर हैं, तो आप बस अपनी परियोजना में बाधा की प्रतिलिपि बना सकते हैं और इसके नामस्थान और उसके एपीआई को अनुकूलित कर सकते हैं (जो 2.0 और 2.1 के बीच थोड़ा बदल गया था)।

/** 
* @Assert\Count(min = 1, minMessage = "Occorre specificare almeno un utente destinatario") 
*/ 
private $users = new ArrayCollection(); 
3

क्या आपने गणना बाधा सत्यापनकर्ता का उपयोग करने का प्रयास किया है? मैं अपने कोड इस तरह दिखेगा लगता है:

->add('users', 'entity', array(
     'label' => 'Destinatari', 
     'class' => 'DL\FidelityBundle\Entity\User', 
     'property' => 'select_label', 
     'multiple' => true, 
     'constraints' => new Count(
      array('min' => 1, 'minMessage' => "Please select at least one user') 
     ), 
    )); 
संबंधित मुद्दे