Следующий код
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 должно быть публичным, а не приватным
Ваш метод CreateNewTransaction
статичен, поэтому нет случаев Transaction
создан и поэтому __constructor
никогда не называется.
Это касается того, почему этот код не работает.
Но, кроме того, я должен сказать, что это полное злоупотребление Event
система Symfony. Использование фреймворка (нет EventDispatcher
компонент), вы не должны создавать EventDispatcher самостоятельно. Это создается FrameworkBundle, и вы должны только ввести event_dispatcher
сервис во все, что вам нужно.
В противном случае вы можете очень быстро потеряться в разных сферах (у каждого диспетчера есть свои подписчики и свои события), и, кроме того, это пустая трата ресурсов.
Других решений пока нет …