2012-07-04 6 views
9

मैं एक समस्या है एक इकाई को बचाने रद्द करने के लिए कैसे: एक प्रक्रिया में, मैं prePersit समारोह में एक इकाई की बचत रद्द करना चाहते हैं:जब prePersist समारोह में ठहरने

/** 
* @ORM\PrePersist 
*/ 
public function setTranslationsValue2() 
{ 
    if((null===$this->getContent())or($this->getContent()=='')) 
    { 
     //wanna stop saving this item??? 
     return false; 
    } 
} 

ऊपर समारोह में, मैं चाहता हूँ इस इकाई को और भी सहेजने के लिए, और मेरी प्रक्रिया को रोकना नहीं चाहते हैं (प्रक्रिया अभी भी एक और एस को सहेजती है)

उत्तर

4

आप अपनी इकाई के भीतर प्रीपेर्सिस्ट एनोटेशन का उपयोग करके ऐसा नहीं कर सकते हैं। आपके दृष्टिकोण के साथ समस्या यह है कि आप अपने मॉडल के भीतर इकाई प्रबंधक तक नहीं पहुंच सकते हैं, लेकिन आपको उसे अपनी ईमानदारी को बनाए रखने के लिए कहने की आवश्यकता होगी।

आप एक घटना श्रोता के रूप में इस्तेमाल कर सकते हैं सिद्धांत डॉक्स में विस्तार से बताया: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#implementing-event-listeners

फिर आप prePersist घटना को सुनना, देखना प्रश्न में प्रकार की किसी भी संस्था कायम हैं और देखते हैं होने के लिए करता है, तो अपनी हालत है पूछता है कि सच। यदि ऐसा है, तो आप इकाई प्रबंधक को इकाई को अलग करने के लिए बता सकते हैं।

लेकिन मुझे लगता है कि आप notNull करने के लिए सामग्री की स्थापना और अशक्त करने के लिए सामग्री बदलने अगर लंबाई < 1. सही संस्थाओं जारी रहती है करने के लिए सुनिश्चित करना है कि द्वारा बहुत सरल कर सकता है आपके डोमेन तर्क का हिस्सा है और मैं ऐसा नहीं होता यह इकाई में या कुछ घटना श्रोता में। यदि आपके पास ऐसे कई श्रोताओं और स्थितियां हैं, तो आप कई जादुई बाधाओं के साथ खत्म हो जाते हैं, जिन्हें कोई नहीं जानता है।

ऊपर दिए गए दृष्टिकोण के अलावा आप एक मान्य() विधि लागू कर सकते हैं और जांच सकते हैं कि कुछ शर्तों को पूरा किया गया है या नहीं। वैध() सत्य होने पर आपका डोमेन तर्क केवल इकाई को बनाए रखेगा। एक और बेहतर तरीका है कि आपकी इकाई को सत्यापित करने के लिए symfony2 सत्यापनकर्ता का उपयोग करें और फिर तदनुसार कार्य करें।

+0

धन्यवाद, मैं एक ईवेंट श्रोता बनाने की कोशिश करूंगा। – user1501227

+0

दस्तावेज़ीकरण तक पहुंच प्रतिबंधित है, कृपया लिंक की जांच करें। मुझे मिलता है "आपके पास इस संस्करण तक पहुंच नहीं है।" –

+0

आपके संकेत के लिए धन्यवाद। नया लिंक http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#implementing-event-listeners है। मैंने तदनुसार मूल जवाब संपादित किया! – Sgoettschkes

2

बस नया अपवाद ("कुछ संदेश ...") फेंक दें;

+0

ओपी ने अनुरोध किया कि समाधान समग्र प्रक्रिया को रोक न सके। –

+1

यही कारण है कि आप कॉलिंग कोड से अपवाद पकड़ते हैं और परिदृश्य से निपटते हैं। – caponica