İki paket içeren bir programım var. Bunlardan biri (CommonBundle) bir olayı "common.add_channel" gönderirken, diğerinde (FetcherBundle) bir servisin onu dinlemesi gerekiyordu. Profilleyicide, "Called Listeners" bölümünde common.add_channel olayını görebiliyorum. Symfony neden dinleyicimi kaydetmediğini anlamıyorum. Neden symfony2 olay dinleyicileri çağırmıyor?
Bu
benim aksiyon,CommonBundle\Controller\ChannelController::createAction
içindedir:
$dispatcher = new EventDispatcher();
$event = new AddChannelEvent($entity);
$dispatcher->dispatch("common.add_channel", $event);
Bu benim AddChannelEvent
:
<?php
namespace Naroga\Reader\FetcherBundle\Service;
class FetcherService {
public function onAddChannel(AddChannelEvent $event) {
die("It's here!");
}
}
: Bu benim dinleyici (FetcherService.php) olması gerekiyordu
<?php
namespace Naroga\Reader\CommonBundle\Event;
use Symfony\Component\EventDispatcher\Event;
use Naroga\Reader\CommonBundle\Entity\Channel;
class AddChannelEvent extends Event {
protected $_channel;
public function __construct(Channel $channel) {
$this->_channel = $channel;
}
public function getChannel() {
return $this->_channel;
}
}
Ve işte dinleyicimi kaydediyorum (services.yml):
kernel.listener.add_channel:
class: Naroga\Reader\FetcherBundle\Service\FetcherService
tags:
- { name: kernel.event_listener, event: common.add_channel, method: onAddChannel }
Neyi yanlış yapıyorum? Common.add_channel'i gönderdiğimde neden etkinlik dinleyicisini çağırıyor?
Standart symfony soru: Eğer services.yml içinde dinleyicisi ekledikten sonra önbelleği temizlendi mi var? –
Evet. Her bir pagehit'de app_dev.php kullanıyorsanız, ihtiyaç duyduğu şey değil, services.yml'deki herhangi bir değişiklik önbelleğe yeniden derlenir. Yine de birçok kez temizledim. –