मैं दो अलग-अलग संदर्भों में एक फॉर्म क्लास का उपयोग कर रहा हूं: दोनों एक नया रिकॉर्ड बनाने के लिए और उस रिकॉर्ड को संपादित करने के लिए भी। मैंने यह जांचने के लिए एक पोस्ट-सत्यापनकर्ता स्थापित किया है कि यूआरएल फ़ील्ड अद्वितीय है।sfValidatorDoctrineUnique एक अद्यतन/संपादन संदर्भ में
$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
new sfValidatorDoctrineUnique(array('model' => 'Page', 'column' => array('url')), array('invalid' => 'This URL already exists.'))
)));
जब मैं एक नया रिकॉर्ड बना रहा हूं तो सत्यापनकर्ता बहुत अच्छा काम करता है। हालांकि, मौजूदा रिकॉर्ड को संपादित करते समय, यह एक त्रुटि फेंकता है क्योंकि यह स्वयं को डुप्लिकेट के रूप में पहचानता है। दूसरे शब्दों में, यदि मैं रिकॉर्ड संपादित करता हूं लेकिन यूआरएल में कोई बदलाव नहीं करता है, तो यह एक डुप्लिकेट त्रुटि फेंकता है।
यह एक आम मुद्दा होना चाहिए, इसलिए मैं सोच रहा हूं कि इस से निपटने का सिम्फनी तरीका क्या होगा? मूल रूप से मैं इसे सहेजते समय स्वयं को अनदेखा करना चाहता हूं (कोई डुप्लिकेट मौजूद नहीं है) लेकिन फिर भी यह सुनिश्चित करने के लिए पोस्ट-वैलिडेटर चलाएं कि कोई वास्तविक डुप्लिकेट मौजूद न हो।
टॉम, मुझे समाधान आप पाया बताएं, के रूप में मैं एक ही हो रहा है मुसीबत। धन्यवाद। – tipu
मेरा समाधान मिला: sfValidatorDoctrineUnique के लिए पहला पैरामीटर होना चाहिए 'प्राथमिक_की' और मान तालिका की प्राथमिक कुंजी होना चाहिए। तो आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास अपने फॉर्म में कोई मान है जिसका नाम उस प्राथमिक कुंजी से मेल खाता है। इसलिए यदि आप एक मॉडल पेज संपादित कर रहे हैं जिसका आईडी i 3 है, तो आपको <इनपुट प्रकार = "छुपा" नाम = "आईडी" मान = "3"> की आवश्यकता है। आखिर में मैंने प्राथमिक रूप से प्राथमिक_की कॉलम को भी मेरे फॉर्म में रखा, इसलिए $ this-> सेट वैलिडेटर ('आईडी', नया एसएफ वैलिडेटरस्ट्रिंग (सरणी ('आवश्यक' => सत्य))। सब कुछ, 3 फाइलों में बदलाव नौकरी हो गई। – tipu