Symfony2 removeListener не находит моего слушателя

У меня проблемы с удалением слушателя, который я создаю динамически:

public function renderMyData($dataA, $dataB)
{
$key = $dataA->getKey();
$this->callables[$key] = function ($event) use ($dataA, $dataB) {
$this->onTableRendered($dataA, $dataB, $event->getAProperty());)
};

$this->eventDispatcher->addListener(
Events::TABLE_RENDERED,
$this->callables[$key]
);
}

Я делаю это главным образом потому, что хочу провести свое собственное мероприятие на Events::TABLE_RENDERED и добавить $dataA а также $dataB в теме.

Потому что это renderMyData можно вызывать с разными значениями для $dataA а также $dataBЯ хочу, чтобы слушатель вызывался только один раз для каждой части данных, поэтому первое, что я делаю в onTableRendered это отменить вызов, который я создал.

public function onTableRendered($dataA, $dataB, $aProperty)
{
$key = $dataA->getKey();
$this->eventDispatcher->removeListener(
Events::TABLE_RENDERED,
$this->callables[$key]
);

// Create new event
$this->eventDispatcher->dispatch(
new MyNewEvent($dataA, $dataB, $aProperty)
);
}

Однако Symfony не может удалить мой вызываемый из списка слушателей. Я отлаживал Symfony (используя v2.6.11) до достижения этой части \Symfony\Component\EventDispatcher\EventDispatcher

foreach ($this->listeners[$eventName] as $priority => $listeners) {
if (false !== ($key = array_search($listener, $listeners, true))) {
unset($this->listeners[$eventName][$priority][$key], $this->sorted[$eventName]);
}
}

Где я могу видеть, что мой обратный вызов находится внутри $listeners, но array_search возвращает ложь …

Я неправильно создаю свой обратный вызов?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector