रनटाइम पर सिम्फनी 2 रेंज वैलिडेटर के लिए न्यूनतम/अधिकतम बदलना

फॉर्मबिल्डर के साथ फॉर्म बनाने के दौरान, मुझे रनटाइम पर सिम्फनी में रेंज वैलिडेटर के लिए अधिकतम मान बदलने की जरूरत है। क्या किसी को यह पता है कि यह कैसे करें?

0

2 उत्तर

जैसा कि मैंने अपनी टिप्पणी में पहले लिखा था, मैंने इस तरह का एक समाधान इस्तेमाल किया:

first part of the range:

class Entity {
 //@Assert\NotBlank()
 private $property;
}

second part of the range:

$formBuilder->get('property')->addEventListener(FormEvents::POST_SUBMIT,
    function(FormEvent $event) use ($something) {
        $property = $event->getForm()->getData();
        if ($property > $something) {
            $event->getForm()->addError(new FormError(...));
        }
    }
);

उम्मीद है कि यह सहायक था

0
जोड़ा

खैर, सिम्फनी को डिज़ाइन किया गया है ताकि बाधा अंतर्निहित वस्तु/डेटा से जुड़ी हो, न कि फ़ॉर्म (प्रकार) स्वयं।

हालांकि, यदि आप किसी वर्ग में मैप नहीं किया गया है, तो आप कर सकते हैं सीधे बाधाओं को जोड़ सकते हैं।

http://symfony.com/doc/current/book/forms.html # जोड़ने-मान्यता

असल में, आप फ़ॉर्म बिल्डर में बाधाओं विकल्प को परिभाषित कर सकते हैं जो बाधा वस्तुओं की सरणी होनी चाहिए।

Symfony \ घटक \ Validator \ constraints \ रेंज का उपयोग करें;

$builder->add('your_field', null, array(
    new Assert\Range(array(
        'min'        => 10
      , 'max'        => $someDyanmicValue
      , 'minMessage' => 'min error message'
      , 'maxMessage' => 'max error message'
    ))
));

यदि आपका फॉर्म है उस श्रेणी में मैप किया गया है जहां रेंज बाधा परिभाषित की गई है, तो आपको इसके बारे में एक अलग तरीके से जाना होगा। मुझे बताएं।

0
जोड़ा
मेरा फॉर्म एक वर्ग में मैपेंड है, और मैं इसे इस तरह से रखूंगा। लेकिन मुझे फॉर्म के लिए इवेंट श्रोता का उपयोग करके एक और संभावित समाधान मिला। सुझाव के लिए वैसे भी Thx।
जोड़ा लेखक amigian74, स्रोत
@ amigian74 यदि आपको एक और समाधान मिला है तो कृपया उन्हें हमारे साथ साझा करें। :)
जोड़ा लेखक CSchulz, स्रोत