diff --git a/composer.json b/composer.json index cbeef1f..8a22812 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ "roave/security-advisories": "dev-master", "zendframework/zend-component-installer": "^1.0", "zendframework/zend-config-aggregator": "^1.0", + "zendframework/zend-eventmanager": "^3.2", "zendframework/zend-expressive": "^2.0.2", "zendframework/zend-expressive-fastroute": "^2.0", "zendframework/zend-expressive-helpers": "^4.0", diff --git a/composer.lock b/composer.lock index 7bdb63b..1ddc3fe 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "ec3f18dc9b7321742d6862e0193aa1a4", + "content-hash": "0822adb4f3d62dc32db289d0bdd9676f", "packages": [ { "name": "container-interop/container-interop", @@ -1668,6 +1668,60 @@ ], "time": "2016-06-30T19:48:38+00:00" }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ], + "time": "2017-07-11T19:17:22+00:00" + }, { "name": "zendframework/zend-expressive", "version": "2.0.3", diff --git a/config/autoload/dependencies.global.php b/config/autoload/dependencies.global.php index d10e8b6..cf8d398 100644 --- a/config/autoload/dependencies.global.php +++ b/config/autoload/dependencies.global.php @@ -37,6 +37,8 @@ return [ 'doctrine.entity_manager.orm_default' => \ContainerInteropDoctrine\EntityManagerFactory::class, 'doctrine.hydrator' => \App\Hydrator\DoctrineObjectFactory::class, + + \App\Middleware\EventSubscriberMiddleware::class => \App\Middleware\EventSubscriberMiddlewareFactory::class, ], ], ]; diff --git a/config/pipeline.php b/config/pipeline.php index 4e66ef6..1c7903b 100644 --- a/config/pipeline.php +++ b/config/pipeline.php @@ -15,6 +15,7 @@ use Zend\Stratigility\Middleware\ErrorHandler; // all Exceptions. $app->pipe(ErrorHandler::class); $app->pipe(App\Middleware\PreFlightMiddleware::class); +$app->pipe(App\Middleware\EventSubscriberMiddleware::class); //$app->pipe(LosMiddleware\BasePath\BasePath::class); $app->pipe(ServerUrlMiddleware::class); diff --git a/src/App/ConfigProvider.php b/src/App/ConfigProvider.php index 089a4d7..d91fce5 100644 --- a/src/App/ConfigProvider.php +++ b/src/App/ConfigProvider.php @@ -2,6 +2,8 @@ namespace App; +use Zend\EventManager\EventManager; + /** * The configuration provider for the App module * @@ -35,6 +37,7 @@ class ConfigProvider return [ 'invokables' => [ Action\PingAction::class => Action\PingAction::class, + EventManager::class => EventManager::class, ], 'factories' => [ Action\HomePageAction::class => Action\HomePageFactory::class, diff --git a/src/App/Middleware/EventSubscriberMiddleware.php b/src/App/Middleware/EventSubscriberMiddleware.php new file mode 100644 index 0000000..f2c3401 --- /dev/null +++ b/src/App/Middleware/EventSubscriberMiddleware.php @@ -0,0 +1,24 @@ +process($request); + } +} diff --git a/src/App/Middleware/EventSubscriberMiddlewareFactory.php b/src/App/Middleware/EventSubscriberMiddlewareFactory.php new file mode 100644 index 0000000..3b36492 --- /dev/null +++ b/src/App/Middleware/EventSubscriberMiddlewareFactory.php @@ -0,0 +1,27 @@ +get(EventManager::class); + $eventManager->setIdentifiers([ + EventSubscriberMiddleware::class, + ]); + + $lazyListener = new LazyListener([ + 'listener' => KoinService::class, + 'method' => 'onReceiveSmsListener', + ], $container); + $eventManager->attach('store.sms.persisted', $lazyListener); + + return new EventSubscriberMiddleware(); + } +} diff --git a/src/App/Service/KoinService.php b/src/App/Service/KoinService.php index b3d2081..7203a69 100644 --- a/src/App/Service/KoinService.php +++ b/src/App/Service/KoinService.php @@ -7,6 +7,7 @@ namespace App\Service; use App\Entity\Sms; use GuzzleHttp\Client; use Psr\Http\Message\ResponseInterface; +use Zend\EventManager\Event; class KoinService { @@ -60,6 +61,11 @@ class KoinService $this->httpClient = $httpClient; } + public function onReceiveSmsListener(Event $event) + { + $this->onReceiveSms($event->getParam('sms')); + } + /** * @param Sms $sms * @return int diff --git a/src/App/Service/SmsStoreService.php b/src/App/Service/SmsStoreService.php index b6703c8..4e0e40d 100644 --- a/src/App/Service/SmsStoreService.php +++ b/src/App/Service/SmsStoreService.php @@ -7,6 +7,7 @@ namespace App\Service; use App\Entity\Sms; use App\Entity\User; use Doctrine\ORM\EntityManager; +use Zend\EventManager\EventManager; class SmsStoreService { @@ -15,9 +16,10 @@ class SmsStoreService */ private $em; - public function __construct(EntityManager $em) + public function __construct(EntityManager $em, EventManager $eventManager) { $this->em = $em; + $this->eventManager = $eventManager; } public function storeSms(string $hashKey, int $direction, array $requestData): bool @@ -34,6 +36,10 @@ class SmsStoreService $this->em->persist($sms); $this->em->flush(); + $this->eventManager->trigger('store.sms.persisted', $this, [ + 'sms' => $sms, + ]); + return true; } diff --git a/src/App/Service/SmsStoreServiceFactory.php b/src/App/Service/SmsStoreServiceFactory.php index 809b837..d3bb410 100644 --- a/src/App/Service/SmsStoreServiceFactory.php +++ b/src/App/Service/SmsStoreServiceFactory.php @@ -5,6 +5,7 @@ namespace App\Service; use Interop\Container\ContainerInterface; +use Zend\EventManager\EventManager; class SmsStoreServiceFactory @@ -13,7 +14,8 @@ class SmsStoreServiceFactory public function __invoke(ContainerInterface $container) { $em = $container->get('doctrine.entity_manager.orm_default'); + $eventManager = $container->get(EventManager::class); - return new SmsStoreService($em); + return new SmsStoreService($em,$eventManager); } }