2012-07-02 14 views
11

में जोड़ा नहीं गया था, मैंने this example का पालन किया है ताकि softdeletable एक्सटेंशन को मेरे प्रोजेक्ट सिम्फनी 2.1.0-DEV पर चलने के लिए परीक्षण किया जा सके।श्रोता "सॉफ़्टडिलेटेबल लिस्टर" को इवेंट मैनेजर

मैं नीचे की तरह मेरे config.yml कॉन्फ़िगर किया गया:

orm: 
    auto_generate_proxy_classes: %kernel.debug% 
    auto_mapping: true 
    filters: 
      softdeleteable: 
      class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter 
      enabled: true 
    mappings: 
     translatable: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Translatable\Entity 
      # make sure vendor library location is correct 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity" 
     loggable: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Loggable\Entity 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity" 
     tree: 
      type: annotation 
      alias: Gedmo 
      prefix: Gedmo\Tree\Entity 
      dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity" 

मेरे नियंत्रक कार्रवाई: Listener "SoftDeleteableListener" was not added to the EventManager!

कुछ करने के बाद:

/** 
* @Route("/del", name="del_article") 
*/ 
public function delAction() { 
    $em = $this->getDoctrine()->getEntityManager(); 

    $article = $em->find('Article', 3); 
    $em->remove($article); 
      $em->flush(); 
    die('ok'); 
} 

जब मैं कोड चलाने के लिए, यह हमेशा अपवाद दिखाने डिबगिंग के साथ बिताए गए समय, मैंने पाया कि कक्षा SoftDeleteableFilter में getListener() कार्य है:

protected function getListener() 
{ 
    if ($this->listener === null) { 
     $em = $this->getEntityManager(); 
     $evm = $em->getEventManager(); 

     foreach ($evm->getListeners() as $listeners) { 
      foreach ($listeners as $listener) { 
       if ($listener instanceof SoftDeleteableListener) { 
        $this->listener = $listener; 

        break 2; 
       } 
      } 
     } 

     if ($this->listener === null) { 
      throw new \RuntimeException('Listener "SoftDeleteableListener" was not added to the EventManager!'); 
     } 
    } 

    return $this->listener; 
} 

हालांकि $listeners संपत्ति नहीं SoftDeleteableListener आइटम है, लेकिन यह इस तरह के

  • Gedmo \ ट्री \ TreeListener
  • Gedmo \ क्रमित करने योग्य \ SortableListener
  • Gedmo \ Sluggable \ SluggableListener
  • के रूप में अन्य श्रोताओं, है
  • Gedmo \ Loggable \ LoggableListener
  • Gedmo \ Timestampable \ TimestampableListener
  • Gedmo \ अनुवाद का \ TranslatableListener

कौन सा loadClassMetadata से उत्पन्न होते हैं। मुझे लगता है कि यह मेरे doctrine_extensions.yml सेवा श्रोता से उत्पन्न हो सकता है:

services: 
    extension.listener: 
     class: Infinitz\UserBundle\Listener\DoctrineExtensionListener 
     calls: 
      - [ setContainer, [ @service_container ] ] 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onLateKernelRequest, priority: -10 } 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 
    gedmo.listener.tree: 
     class: Gedmo\Tree\TreeListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.translatable: 
     class: Gedmo\Translatable\TranslatableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 
      - [ setDefaultLocale, [ %locale% ] ] 
      - [ setTranslationFallback, [ false ] ] 

    gedmo.listener.timestampable: 
     class: Gedmo\Timestampable\TimestampableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.sluggable: 
     class: Gedmo\Sluggable\SluggableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.sortable: 
     class: Gedmo\Sortable\SortableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ] 

    gedmo.listener.loggable: 
     class: Gedmo\Loggable\LoggableListener 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 
     calls: 
      - [ setAnnotationReader, [ @annotation_reader ] ]   

तो मैं निम्नलिखित जोड़ने की कोशिश की:

gedmo.listener.softdeleteable: 
    class: Gedmo\SoftDeleteable\SoftDeleteableListener 
    tags: 
     - { name: doctrine.event_subscriber, connection: default } 
    calls: 
     - [ setAnnotationReader, [ @annotation_reader ] ] 

लेकिन यह अभी भी पता चलता Listener "SoftDeleteableListener" was not added to the EventManager!

मैं एक श्रोता जोड़ने की आवश्यकता है सॉफ़्टडिलेटेबल लिस्टर का कौन सा उदाहरण?

उत्तर

15

अस्पष्ट उत्तर के कारण समस्या का समाधान नहीं कर सका।

अपनी परियोजना के लिए softdeletable व्यवहार को जोड़ने के लिए अपने config.yml

orm 
    .. 
    filters: 
    softdeleteable: 
     class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter 
     enabled: true 

services: 
    .. 
    gedmo.listener.softdeleteable: 
    class: Gedmo\SoftDeleteable\SoftDeleteableListener 
    tags: 
     - { name: doctrine.event_subscriber, connection: default } 
    calls: 
     - [ setAnnotationReader, [ @annotation_reader ] ] 

Btw, अधिक संपूर्ण चर्चा है, जो मुझे मदद की निम्न पंक्तियां जोड़ें, पाया जा सकता है: https://github.com/Atlantic18/DoctrineExtensions/issues/380

+0

GitHub मुद्दे के लिए लिंक काम नहीं करता है अब और – mandark

+1

@mandark अद्यतन – aur1mas

+0

मैं "Uncaught Symfony \ घटक \ YAML \ अपवाद \ ParseException: आरक्षित सूचक" मिल गया @ "एक प्रारंभ नहीं कर सकता सादा स्केलर; आपको स्केलर को उद्धृत करने की आवश्यकता है ", मुझे उद्धरण देना था: [" @annotation_reader "] –

0
मेरी लापरवाही के बारे में खेद

, क्योंकि मैं फ़ाइल उपयोग के तल पर config.yml फ़ाइल में मेरी विन्यास को अधिलेखित कर दिया:

services: 
    gedmo.listener.softdeleteable: 
     class:  Gedmo\SoftDeleteable\SoftDeleteableListener 

और ठीक से कॉन्फ़िगर नहीं किया ..... अब समस्या तय किया गया है ।