2013-05-03 5 views
5

अगर मैं किसी प्रकार का ध्वज/विकल्प है जो प्रमाणीकरण श्रृंखला में पहली त्रुटि पर symfony2 सत्यापन रोकता है तो मैं सूचनाओं की खोज कर रहा हूं।Symfony2 में पहली त्रुटि ध्वज पर सत्यापन रोकें?

email: 
    - NotBlank: { groups: [ send_activation_email ] } 
    - Length: { min: 6, max: 80, charset: UTF-8, groups: [ send_activation_email ] } 
    - Email: { groups: [ send_activation_email ] } 

मैं पहली त्रुटि के बाद सत्यापन बंद करना चाहते हैं: उदाहरण के लिए मैं अपने email मैदान पर तीन प्रमाणकों की है। मैं उसे कैसे प्राप्त कर सकता हूं? मैं इसी तरह के सवाल पढ़ें:

Symfony2 : Validation Halt on First Error

How to stop validation on constraint failure in Symfony2

Symfony-2 gives more than one validation error message

अंतिम एक काफी अच्छा है, लेकिन सत्यापन समूहों हर बार का उपयोग किए बिना यह करने के लिए किसी भी तरह से है, देखते हैं जब एक से अधिक सत्यापनकर्ता? मैंने कहीं पढ़ा है कि सिम्फनी 2.2 में इसके लिए एक ध्वज या विकल्प होगा, लेकिन मेरे पास 2.2.1 संस्करण है और ऐसा विकल्प नहीं मिल रहा है।

उत्तर

1

सिम्फनी 2.3 के रूप में आप Group Sequences का उपयोग कर ऐसा कर सकते हैं (हालांकि समूह अनुक्रमों के लिए फॉर्म समर्थन स्पॉटी हो सकता है)।

+1

तो अगर मैं प्रत्येक त्रुटि के बाद सत्यापन बंद करना चाहता हूं तो मुझे कई समूह अनुक्रम बनाना चाहिए क्योंकि एक ही फॉर्म फ़ील्ड पर अधिकतम संख्या में वैधकर्ता हैं? उदाहरण के लिए मेरे पास दो फिल्में हैं, पहले 2 वैधकर्ताओं के साथ और दूसरा पांच के साथ। तो हर त्रुटि पर रुकने के लिए मुझे पांच समूह अनुक्रम बनाना होगा? – piotrekkr

+0

जैसा कि मैं इसे समझता हूं, हां। हालांकि अगर मैं आप थे तो मैं फॉर्म के साथ समूह अनुक्रम सत्यापन समर्थन पर जांच करूंगा। मुझे यकीन है कि संस्करण 2.2.1 उनका समर्थन नहीं करता है। –

3

आप उस उद्देश्य के लिए Chain सत्यापनकर्ता का उपयोग कर सकते हैं:

<?php 

use Symfony\Component\Validator\Constraints\Date; 
use Symfony\Component\Validator\Constraints\Type; 
use Acme\Validator\Constraints\Chain; 

$constraint = new Chain([new Type('string'), new Date()]); 

एक्सएमएल में: https://gist.github.com/rybakit/4705749

यहाँ सादे PHP में एक उदाहरण है

<!-- src/Acme/DemoBundle/Resources/config/validation.xml --> 

<class name="Acme\DemoBundle\Entity\AcmeEntity"> 
    <property name="date"> 
     <constraint name="Acme\Validator\Constraints\Chain"> 
      <option name="constraints"> 
       <constraint name="Type"> 
        <option name="type">string</option> 
       </constraint> 
       <constraint name="Date" /> 
      </option> 
     </constraint> 
    </property> 
</class> 

लेकिन ध्यान रखें कि अगर आप चाहते हैं Chain बाधाओं को नेस्टेड करने के लिए, जैसे:

<?php 

$constraint = new Chain([ 
    new Callback(...), 
    new Chain([new Type('string'), new Date()]), 
]); 

आप validator.validator_factory सिम्फोनी सेवा ओवरराइड करने के लिए वर्तमान कार्यान्वयन में नेस्टेड की कमी से निपटने के साथ इस मुद्दे को ठीक करने के लिए है: https://github.com/symfony/Validator/blob/fc0650c1825c842f9dcc4819a2eaff9922a07e7c/ConstraintValidatorFactory.php#L48

NoCacheConstraintValidatorFactory.php फ़ाइल को देखें कि यह कैसे हल किया जा सकता है।

संबंधित मुद्दे