Friday 15 February 2013

php - Gedmo Timestampable Annotation Doesn't Appear to Work With Event Listeners -


अतः,

मेरे पास टाइमस्टैम्पनीय फ़ील्ड के साथ एक इकाई है, जैसे:

  & lt;? Php नामस्थान Acme \ Bundle \ Entity; Acme \ PathEnumerable इंटरफेस का उपयोग करें EnumerableInterface; Acme \ PathEnumerable को PathEnumerableTrait के रूप में उपयोग करें; सिद्धांत / ORM \ मैपिंग को ओआरएम के रूप में प्रयोग करें; Gedmo के रूप में \ Mapping \ Annotation का उपयोग करें; / ** * कुछएन्टीटी * * @ORM \ Table () * @ORM \ HasLifecycle कॉलबैक * / वर्ग SomeEntity लागू करता है EnumerableInterface {PathEnumerableTrait का उपयोग करें; / ** * @ वारा \ डेटटाइम * * @Gedmo \ Timestampable (on = "create") * @ORM \ कॉलम (नाम = "बनाया गया", प्रकार = "दिन-समय") * / निजी $ निर्मितएट; / ** * @ वारा \ डेटटाइम * * @ORM \ कॉलम (नाम = "अपडेटेड_ैट", प्रकार = "दिन-समय") * @Gedmo \ Timestampable (पर "=" अद्यतन ") * / निजी $ अपडेटेड; / ** * सृजित कराएट * * @ रिटर्न \ डेटटाइम * / सार्वजनिक फ़ंक्शन getCreatedAt () {वापसी $ this- & gt; बना दिया; } / ** * अद्यतित प्राप्त करें * * * वापसी * ​​दिनांकटाइम * / सार्वजनिक फ़ंक्शन getUpdatedAt () {वापसी $ this- & gt; updatedAt; }}   

मैंने उसके बाद पोस्टपेर्शिस्ट, पोस्टअपडेट और पोस्ट फ्लश इवेंट्स के लिए एक जीवनचक्र ग्राहक स्थापित किया है I Service.yml इस तरह दिखता है:

  सेवाएं: acme.element_listener: वर्ग:% iacme.element_listener.class% तर्क: प्रबंधक: "@ सिद्धांत:। डीफॉल्ट_नेटिटी_मैनेजर" टैग: - {name : सिद्धांत: event_subscriber, कनेक्शन: डिफ़ॉल्ट}   

वास्तविक श्रोता इस तरह दिखता है:

  & lt;? Php नामस्थान Acme \ bundle \ EventListener; Acme \ PathEnumerableInterface का उपयोग करें; सिद्धांत / ORM \ कार्यक्रम \ LifecycleEventArgs का उपयोग करें; सिद्धांत \ ORM \ EntityManager का उपयोग करें; सिद्धांत \ ORM \ इवेंट \ PostFlushEventArgs का उपयोग करें; क्लास इवेंट लिस्टनर {/ ** * @ वर्ट सिस्ट्रिइन \ ORM \ इकाई प्रबंधक / निजी $ इकाई प्रबंधक; / ** * @ सर सरणी * / निजी $ पथ = []; सार्वजनिक फ़ंक्शन __ रचना (EntityManager $ entityManager) {$ this- & gt; entityManager = $ entityManager; } सार्वजनिक समारोह प्राप्त करेंसब्सब्लेटेड एव्हेंट्स () {वापसी ['पोस्टपेर्सिस्ट']; } निजी फ़ंक्शन पोस्टपरर्सिस्ट (लाइफसिचिएवेंटअर्ज $ आर्ग्स) {$ इकाई = $ आल्ज़-> gt; getEntity (); // सेट करें $ newPath को एक जनरेटेड पथ पर सेट करें और चेक करें ताकि हम एक अनंत लूप में समाप्त न हों अगर ($ entity- & gt; getPath ()! = $ NewPath) {// ... इकाई $ $ के साथ कुछ सामान इस- & gt; entityManager- & gt; जारी रहती है ($ इकाई); $ इस- & gt; entityManager- & gt; फ्लश (); }}}   

जब मैं ईवेंट श्रोता को निकालता हूं, तो सब ठीक है और टाइमस्टेबल योग्य फ़ील्ड सही तरीके से भर जाती हैं हालांकि, जब मैं श्रोता के साथ एक नई इकाई बनाऊँ तो टाइमस्टैबल योग्य फ़ील्ड भरे नहीं।

मेरा प्रश्न यह है कि, घटना श्रोता क्या टाइमस्टैम्पनीय फ़ील्ड में Gedmo को भरने से रोकेंगे? मैं शायद वाकई कुछ कर रहा हूं, लेकिन अभी तक मैं यह नहीं देख सकता कि क्या हो सकता है ...

"post-text" itemprop = "text">

ठीक है, इसलिए यहां कुछ चीजें गलत थीं जो मुझे समस्याएं पैदा कर रही थीं:

  1. मेरा ईवेंटलाइस्टर क्लास ने ईवेंट सब्सक्राइबर को लागू नहीं किया। वर्ग चाहिए को इस प्रकार घोषित किया गया है:

      & lt; php नामस्थान Acme \ bundle \ EventListener; Acme \ PathEnumerableInterface का उपयोग करें; सिद्धांत / ORM \ कार्यक्रम \ LifecycleEventArgs का उपयोग करें; सिद्धांत \ ORM \ EntityManager का उपयोग करें; सिद्धांत \ ORM \ इवेंट \ PostFlushEventArgs का उपयोग करें; सिद्धांत \ कॉमन \ इवेंट सब्सक्राइबर का उपयोग करें; इवेंट सब्सक्राइबर {/ .....}    
  2. आप EntityManager को एक निर्माण तर्क के रूप में नहीं दे सकते। यह वास्तव में काफी कुछ समझ में आता है जब आप इसके बारे में सोचते हैं, और वास्तव में वास्तव में बाधा नहीं देते हैं जैसा कि getEntityManager घटना LifecycleEventArgs वस्तु और PostFlushEventArgs ऑब्जेक्ट में उपलब्ध है < / div>

No comments:

Post a Comment