2017-09-28 1 views
1

In Anbetracht dieser folgenden Serviceklasse genannt:Symfony autowire @required Methode mit Dispatcher Ereignis nie

namespace AppBundle\Listener\Entity; 

use AppBundle\Entity\Payment; 
use AppBundle\Event\PaymentEvent; 
use AppBundle\Event\PaymentEvents; 
use Symfony\Component\EventDispatcher\EventDispatcherInterface; 

final class PaymentEntityListener 
{ 
    /** 
    * @var EventDispatcherInterface 
    */ 
    private $eventDispatcher; 

    /** 
    * @required 
    * 
    * @param EventDispatcherInterface $eventDispatcher 
    */ 
    public function setEventDispatcher(EventDispatcherInterface $eventDispatcher) 
    { 
     dump($eventDispatcher); 
     $this->eventDispatcher = $eventDispatcher; 
    } 

    /** 
    * @param Payment $payment 
    */ 
    public function postPersist(Payment $payment) 
    { 
     $this->eventDispatcher->dispatch(PaymentEvents::ADD, new PaymentEvent($payment)); 
    } 
} 

Die Methode PaymentEntityListener::setEventDispatcher sollte mit dem EventDispatcherInterface abgestimmt Dienst rufen werden.

$ ./bin/console debug:container --show-private AppBundle\\Listener\\Entity\\PaymentEntityListener 

Information for Service "AppBundle\Listener\Entity\PaymentEntityListener" 
========================================================================= 

---------------- ------------------------------------------------- 
    Option   Value            
---------------- ------------------------------------------------- 
    Service ID  AppBundle\Listener\Entity\PaymentEntityListener 
    Class   AppBundle\Listener\Entity\PaymentEntityListener 
    Tags    -             
    Calls   setEventDispatcher        
    Public   no            
    Synthetic  no            
    Lazy    no            
    Shared   yes            
    Abstract   no            
    Autowired  yes            
    Autoconfigured yes            
---------------- ------------------------------------------------- 

Aber diese Methode nie aufgerufen:

Diese Methode wird nach dem Debug-Befehl richtig konfiguriert ist.

Hier ist meine services.yml:

imports: 
    - { resource: legacy_aliases.yml } 

services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
     public: false 

    _instanceof: 
     Doctrine\ORM\Decorator\EntityManagerDecorator: 
      public: true 

    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     exclude: '../../src/AppBundle/{Entity,Repository}' 

    AppBundle\Controller\: 
     resource: '../../src/AppBundle/Controller' 
     tags: ['controller.service_arguments'] 

    PowerDNSBundle\: 
     resource: '../../src/PowerDNSBundle/*' 
     exclude: '../../src/PowerDNSBundle/{Entity,Repository}' 

    PowerDNSBundle\Doctrine\ORM\PowerDNSEntityManager: 
     arguments: 
      $wrapped: '@doctrine.orm.powerdns_entity_manager' 

Ich weiß nicht, warum das Verfahren nicht genannt ist und warum Symfony werfen keine Ausnahme.

FYI, den folgenden Befehl ein:

./bin/console debug:container --show-private Symfony\\Component\\EventDispatcher\\EventDispatcherInterface 

Hat ein Service Spiel zurückzukehren.

Wo kann das Problem sein?

Danke für Ihre Hilfe.

Antwort

1

fand ich endlich, warum: Dieser Hörer nicht den richtigen Tag hat:

AppBundle\Listener\Entity\: 
    resource: '../../src/AppBundle/Listener/Entity' 
    tags: ['doctrine.orm.entity_listener'] 

Diesen Grund, ich denke, der Dienst von Lehre nicht erkannt wird und dies versucht, den Hörer selbst zu erstellen. Aber in diesem Fall wird die Methode niemals aufgerufen.

Verwandte Themen