Подписчик Symfony EventDispatcher не работает

Следующий код

use Application\Events\TransactionCreatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;

class Transaction implements EventSubscriberInterface
{
protected $date;
protected $name;
protected $address;
protected $phone;
protected $price_with_vat;
protected $transaction_type;
protected $receipt;
protected $currency;protected function __construct($date, $name, $address, $phone, $price_with_vat, $transaction_type, $receipt, $currency)
{
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber($this);
$dispatcher->dispatch(TransactionCreatedEvent::NAME, new TransactionCreatedEvent($date, $name, $address, $phone, $price_with_vat, $transaction_type, $receipt, $currency));
}

public static function CreateNewTransaction($date, $name, $address, $phone, $price_with_vat, $transaction_type, $receipt, $currency){
return new Transaction($date, $name, $address, $phone, $price_with_vat, $transaction_type, $receipt, $currency);
}

private function onCreateNewTransaction($Event){
$this->date = $Event->date;
$this->name = $Event->name;
$this->address = $Event->address;
$this->phone = $Event->phone;
$this->price_with_vat = $Event->price_with_vat;
$this->transaction_type = $Event->transaction_type;
$this->receipt = $Event->receipt;
$this->currency = $Event->currency;
}

public static function getSubscribedEvents()
{
return array(TransactionCreatedEvent::NAME => 'onCreateNewTransaction');
}
}

Предполагается отправить TransactionCreated событие и быть пойманным самим классом и onCreatedNewTransaction Функция get вызывается для того, чтобы установить свойства класса.

Transaction класс создан как

$Transaction = Transaction::CreateNewTransaction('6/6/2016', 'John'....);

но когда я отлаживаю проект $Transaction объект имеет null ценности. Я установил breakpoint в onCreateNewTransaction метод, и я обнаружил, что таким образом функция не вызывается.

ОБНОВЛЕНО

Задача решена

onCreateNewTransaction должно быть публичным, а не приватным

0

Решение

Ваш метод CreateNewTransaction статичен, поэтому нет случаев Transaction создан и поэтому __constructor никогда не называется.

Это касается того, почему этот код не работает.

Но, кроме того, я должен сказать, что это полное злоупотребление Event система Symfony. Использование фреймворка (нет EventDispatcher компонент), вы не должны создавать EventDispatcher самостоятельно. Это создается FrameworkBundle, и вы должны только ввести event_dispatcher сервис во все, что вам нужно.

В противном случае вы можете очень быстро потеряться в разных сферах (у каждого диспетчера есть свои подписчики и свои события), и, кроме того, это пустая трата ресурсов.

2

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

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

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