コード例 #1
0
 /**
  * Register the subscriber that stores domain events only for the
  * `ewallet:transfer` command
  *
  * @param ConsoleCommandEvent $event
  */
 public function storeEvents(ConsoleCommandEvent $event)
 {
     if ('ewallet:transfer' === $event->getCommand()->getName()) {
         $this->publisher->subscribe($this->subscriber);
     }
 }
コード例 #2
0
 /**
  * Register the services for Transfer Funds feature delivered through a
  * console command
  *
  * @param Container $container
  */
 public function register(Container $container)
 {
     $container['ewallet.member_repository'] = function () use($container) {
         return $container['doctrine.em']->getRepository(Member::class);
     };
     $container['ewallet.template_engine'] = function () use($container) {
         return new TwigTemplateEngine($container['twig.environment']);
     };
     $container['ewallet.transfer_funds'] = function () use($container) {
         $transferFunds = new TransferFundsTransactionally($container['ewallet.member_repository']);
         $transferFunds->setTransactionalSession(new DoctrineSession($container['doctrine.em']));
         $transferFunds->setPublisher($container['ewallet.events_publisher']);
         return $transferFunds;
     };
     $container['ewallet.member_formatter'] = function () {
         return new MemberFormatter();
     };
     $container['ewallet.events_publisher'] = function () use($container) {
         $publisher = new EventPublisher();
         $publisher->subscribe($container['ewallet.transfer_funds_logger']);
         return $publisher;
     };
     $container['ewallet.transfer_funds_logger'] = function () use($container) {
         return new LogTransferWasMadeSubscriber($container['ewallet.logger'], $container['ewallet.member_formatter']);
     };
     $container['ewallet.logger'] = function () use($container) {
         $logger = new Logger($container['monolog']['ewallet']['channel']);
         $logger->pushHandler(new StreamHandler($container['monolog']['ewallet']['path'], Logger::DEBUG));
         return $logger;
     };
     $container['ewallet.transfer_mail_sender'] = function () use($container) {
         return new TransferFundsZendMailSender($container['ewallet.template_engine'], (new TransportFactory())->buildTransport($container['mail']));
     };
     $container['ewallet.transfer_mail_notifier'] = function () use($container) {
         return new TransferFundsEmailNotifier($container['ewallet.member_repository'], $container['ewallet.transfer_mail_sender']);
     };
     $container['ewallet.event_store'] = function () use($container) {
         return $container['doctrine.em']->getRepository(StoredEvent::class);
     };
     $container['ewallet.event_persist_subscriber'] = function () use($container) {
         return new PersistEventsSubscriber($container['ewallet.event_store'], new StoredEventFactory(new JsonSerializer()));
     };
     $container['ewallet.store_events_listener'] = function () use($container) {
         return new StoreEventsListener($container['ewallet.event_persist_subscriber'], $container['ewallet.events_publisher']);
     };
     $container['ewallet.console.dispatcher'] = function () use($container) {
         $dispatcher = new EventDispatcher();
         $dispatcher->addListener(ConsoleEvents::COMMAND, $container['ewallet.store_events_listener']);
         return $dispatcher;
     };
     $container['ewallet.twig.extension'] = function () {
         return new EwalletExtension(new MemberFormatter());
     };
     $container->extend('twig.loader', function (Loader $loader) {
         $loader->addPath(__DIR__ . '/../../../../EwalletModule/Bridges/Twig/Resources/templates');
         $loader->addPath(__DIR__ . '/../../SymfonyConsole/Resources/templates');
         return $loader;
     });
     $container->extend('twig.environment', function (Environment $twig) use($container) {
         $twig->addExtension($container['ewallet.twig.extension']);
         return $twig;
     });
 }
コード例 #3
0
 /**
  * Register event subscriber to persist all domain events generated by
  * the web application
  */
 public function call()
 {
     $this->publisher->subscribe($this->subscriber);
     $this->next->call();
 }