2014-04-15 6 views
6

में मैं अपने आवेदन में एक बंडल-व्यापी पैरामीटर जोड़ने की कोशिश कर रहा हूं ताकि मैं इसे अपनी सत्यापन सीमा फ़ाइल (validation.yml) में जोड़ सकूं:मैं सिम्फनी 2 में सत्यापन बाधा में पैरामीटर कैसे पास करूं - yml

myApp\myBundle\Entity\Contact: 
properties: 
    name: 
     - NotBlank: { message: "%myvariable%" } 

मैं config.yml में सामान्य रूप से मेरी पैरामीटर कहा:

parameters: 
    # Validation config 
    myvariable: Please tell us your name. 

लेकिन पेज सिर्फ% myvariable% पाठ प्रस्तुत हुई है, बल्कि वांछित स्ट्रिंग से। जावास्क्रिप्ट में उपयोग के लिए पृष्ठ पर सत्यापन संदेश जोड़ते समय भी मैं अपने फॉर्मबिल्डर इंटरफेस में इस पैरामीटर का उपयोग करना चाहता हूं। क्या yml यह अनुमति देता है? यदि नहीं, तो मैं उच्च स्तर पर ऐसे पैरामीटर को कैसे शामिल करूं?

+0

मेरे पास एक ही प्रश्न था (और इसे पहले नहीं मिला) जिसमें कुछ रोचक टिप्पणियां हैं (लेकिन अभी तक कोई जवाब नहीं है): http://stackoverflow.com/questions/42486647/use-parameters-in- प्रमाणीकरण –

उत्तर

1

नहीं, यह वर्तमान में संभव नहीं है।

इसका वाईएएमएल या एक्सएमएल या यहां तक ​​कि सेवा परिभाषाओं के साथ कुछ लेना देना नहीं है। वैलिडेटर घटक स्वयं सत्यापन नियम पढ़ता है - जैसा कि आप देख सकते हैं, संरचना सेवा परिभाषाओं के मुकाबले काफी अलग है। दुर्भाग्यवश, यह बाधाओं में पैरामीटर को प्रतिस्थापित नहीं करता है।

मुख्य तर्क \Symfony\Component\Validator\Mapping\Loader\YamlFileLoader में रहता है जो \Symfony\Component\Validator\ValidatorBuilder::getValidator द्वारा बनाया गया है।

  1. validator.builder सेवा के अधिभावी परिभाषा:

    आप ऐसा करके बना सकते हैं।

यह %validator.builder.factory.class%::createValidatorBuilder का प्रयोग कर बनाया है, लेकिन जैसा कि आप पैरामीटर बैग किसी भी तरह प्राप्त करने के लिए, वहाँ पर्याप्त निर्भरता नहीं है - वर्ग कारखाने प्रयोग में, कारखाने सेवा नहीं है।

  1. नई कक्षा बनाना, जो ValidatorBuilder बढ़ाता है।

इसे पैरामीटर बैग को कन्स्ट्रक्टर या सेटटर के माध्यम से लेना चाहिए। इसे यहां पारित करने के लिए चरण (1) में कॉन्फ़िगर किया जाना चाहिए।

यह कक्षा किसी अन्य वर्ग के फ़ाइल लोडर (3 देखें) बनाएगी, उस पैरामीटर बैग को भी पास करेगी।

  1. YamlFileLoader और YamlFilesLoader के लिए नई कक्षाएं बनाना। प्रत्येक प्रारूप के लिए अतिरिक्त 2 जिसे आप समर्थन देना चाहते हैं।

यह अतिरिक्त रूप से कन्स्ट्रक्टर में पैरामीटर बैग लेगा और कुछ कार्यक्षमता को ओवरराइड करेगा। उदाहरण के लिए, मुझे लगता है कि सभी पैरामीटर हैंडलिंग newConstraint विधि में किया जा सकता है - विकल्प के माध्यम से पुनरावृत्त करें, पैरामीटर हल करें, फिर प्रतिस्थापित विकल्पों के साथ पैरेंट विधि को कॉल करें।


ऐसा नहीं है कि Symfony (इस यूज-केस में संभवतः नहीं इतनी अच्छी तरह से) ऐसे ही बढ़ाया जा सकता है अच्छा है, लेकिन मुझे लगता है कि यह आसान हो बस कस्टम बाधा सत्यापनकर्ता के साथ अपने स्वयं बाधा लिखने के लिए है, जो कि इंजेक्षन होगा इसमें पैरामीटर

वैलिडेटर सेवा के चारों ओर एक रैपर पर भी विचार करें - यदि आपको केवल सत्यापन संदेशों को प्रतिस्थापित करने की आवश्यकता है, तो आप validator सेवा को मूल में इंजेक्ट करने के लिए प्रतिस्थापित कर सकते हैं। अधिक जानकारी के लिए http://symfony.com/doc/current/service_container/service_decoration.html देखें।

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