Следующего кода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
получить ссылаться, чтобы установить свойство класса.
Transaction
класса инстанцирован как
$Transaction = Transaction::CreateNewTransaction('6/6/2016', 'John'....);
но когда я отладка проекта $Transaction
объекта имеет null
значения. Я установил breakpoint
по методу onCreateNewTransaction
, и я обнаружил, что при этом функция не вызывается.
ОБНОВЛЕНО
Проблема решена
`onCreateNewTransaction» должен быть публичным, а не частным
Возможно, мне что-то не хватает, но зачем вам нужно событие в этом сценарии? Не имеет смысла просто назначать эти свойства в конструкторе? Кроме того, вы должны вводить EventDispatcher вместо того, чтобы вводить его в конструктор, таким образом вы создаете фиксированную зависимость. –