Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 3bdb9f4

Browse files
committed
Refactored to use upcoming EventManager v3
Updates all code to work with the upcoming v3 of EventManager. In particular: - Updated the EventManager factory to inject the SharedEventManager at instantiation, if that service is present. - Updated the EventManager initializer to inject not only if no EM instance is present, but also if the current EM instance has no shared manager present. The latter is a good indication that the EM instance was lazy-loaded by the getter. - Updated the Application constructor to pass arguments. This was necessary due to a strange circular dependency with the changes to the initializer. It's also better DI. - Fixed all `attachAggregate()` calls to use `$aggregate->attach()`, and ensured there were no calls to `$events->attach()` that were attaching aggregates. - Reviewed all `trigger()` calls for appropriate signatures, updating those that needed it. In many cases, an additional call to `$event->setName()` was also required. This can likely be merged to develop sooner rather than later, as it represents a work-in-progress towards the updated MVC.
1 parent 6775182 commit 3bdb9f4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+490
-370
lines changed

composer.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@
1414
},
1515
"require": {
1616
"php": ">=5.5",
17-
"zendframework/zend-eventmanager": "~2.5",
17+
"zendframework/zend-eventmanager": "dev-develop as 2.7.0",
1818
"zendframework/zend-servicemanager": "~2.5",
1919
"zendframework/zend-hydrator": "~1.0",
2020
"zendframework/zend-form": "~2.6",
21-
"zendframework/zend-stdlib": "~2.7"
21+
"zendframework/zend-stdlib": "~2.7",
22+
"container-interop/container-interop": "^1.1"
2223
},
2324
"require-dev": {
2425
"zendframework/zend-authentication": "~2.5",
@@ -31,14 +32,14 @@
3132
"zendframework/zend-inputfilter": "~2.5",
3233
"zendframework/zend-json": "~2.5",
3334
"zendframework/zend-log": "~2.5",
34-
"zendframework/zend-modulemanager": "~2.6",
35+
"zendframework/zend-modulemanager": "dev-develop as 2.7.0",
3536
"zendframework/zend-session": "~2.5",
3637
"zendframework/zend-serializer": "~2.5",
3738
"zendframework/zend-text": "~2.5",
3839
"zendframework/zend-uri": "~2.5",
3940
"zendframework/zend-validator": "~2.5",
4041
"zendframework/zend-version": "~2.5",
41-
"zendframework/zend-view": "~2.5",
42+
"zendframework/zend-view": "dev-develop as 2.6.0",
4243
"fabpot/php-cs-fixer": "1.7.*",
4344
"phpunit/PHPUnit": "~4.0"
4445
},

src/Application.php

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Zend\EventManager\EventManagerAwareInterface;
1313
use Zend\EventManager\EventManagerInterface;
1414
use Zend\ServiceManager\ServiceManager;
15+
use Zend\Stdlib\RequestInterface;
1516
use Zend\Stdlib\ResponseInterface;
1617

1718
/**
@@ -103,15 +104,18 @@ class Application implements
103104
* @param mixed $configuration
104105
* @param ServiceManager $serviceManager
105106
*/
106-
public function __construct($configuration, ServiceManager $serviceManager)
107-
{
107+
public function __construct(
108+
$configuration,
109+
ServiceManager $serviceManager,
110+
EventManagerInterface $events,
111+
RequestInterface $request,
112+
ResponseInterface $response
113+
) {
108114
$this->configuration = $configuration;
109115
$this->serviceManager = $serviceManager;
110-
111-
$this->setEventManager($serviceManager->get('EventManager'));
112-
113-
$this->request = $serviceManager->get('Request');
114-
$this->response = $serviceManager->get('Response');
116+
$this->setEventManager($events);
117+
$this->request = $request;
118+
$this->response = $response;
115119
}
116120

117121
/**
@@ -142,19 +146,20 @@ public function bootstrap(array $listeners = [])
142146
$listeners = array_unique(array_merge($this->defaultListeners, $listeners));
143147

144148
foreach ($listeners as $listener) {
145-
$events->attach($serviceManager->get($listener));
149+
$serviceManager->get($listener)->attach($events);
146150
}
147151

148152
// Setup MVC Event
149153
$this->event = $event = new MvcEvent();
154+
$event->setName(MvcEvent::EVENT_BOOTSTRAP);
150155
$event->setTarget($this);
151-
$event->setApplication($this)
152-
->setRequest($this->request)
153-
->setResponse($this->response)
154-
->setRouter($serviceManager->get('Router'));
156+
$event->setApplication($this);
157+
$event->setRequest($this->request);
158+
$event->setResponse($this->response);
159+
$event->setRouter($serviceManager->get('Router'));
155160

156161
// Trigger bootstrap events
157-
$events->trigger(MvcEvent::EVENT_BOOTSTRAP, $event);
162+
$events->triggerEvent($event);
158163
return $this;
159164
}
160165

@@ -294,13 +299,15 @@ public function run()
294299
};
295300

296301
// Trigger route event
297-
$result = $events->trigger(MvcEvent::EVENT_ROUTE, $event, $shortCircuit);
302+
$event->setName(MvcEvent::EVENT_ROUTE);
303+
$result = $events->triggerEventUntil($shortCircuit, $event);
298304
if ($result->stopped()) {
299305
$response = $result->last();
300306
if ($response instanceof ResponseInterface) {
307+
$event->setName(MvcEvent::EVENT_FINISH);
301308
$event->setTarget($this);
302309
$event->setResponse($response);
303-
$events->trigger(MvcEvent::EVENT_FINISH, $event);
310+
$events->triggerEvent($event);
304311
$this->response = $response;
305312
return $this;
306313
}
@@ -311,14 +318,16 @@ public function run()
311318
}
312319

313320
// Trigger dispatch event
314-
$result = $events->trigger(MvcEvent::EVENT_DISPATCH, $event, $shortCircuit);
321+
$event->setName(MvcEvent::EVENT_DISPATCH);
322+
$result = $events->triggerEventUntil($shortCircuit, $event);
315323

316324
// Complete response
317325
$response = $result->last();
318326
if ($response instanceof ResponseInterface) {
327+
$event->setName(MvcEvent::EVENT_FINISH);
319328
$event->setTarget($this);
320329
$event->setResponse($response);
321-
$events->trigger(MvcEvent::EVENT_FINISH, $event);
330+
$events->triggerEvent($event);
322331
$this->response = $response;
323332
return $this;
324333
}
@@ -350,8 +359,12 @@ protected function completeRequest(MvcEvent $event)
350359
{
351360
$events = $this->events;
352361
$event->setTarget($this);
353-
$events->trigger(MvcEvent::EVENT_RENDER, $event);
354-
$events->trigger(MvcEvent::EVENT_FINISH, $event);
362+
363+
$event->setName(MvcEvent::EVENT_RENDER);
364+
$events->triggerEvent($event);
365+
366+
$event->setName(MvcEvent::EVENT_FINISH);
367+
$events->triggerEvent($event);
355368
return $this;
356369
}
357370
}

src/Controller/AbstractController.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,14 @@ public function dispatch(Request $request, Response $response = null)
109109
$this->response = $response;
110110

111111
$e = $this->getEvent();
112-
$e->setRequest($request)
113-
->setResponse($response)
114-
->setTarget($this);
112+
$e->setName(MvcEvent::EVENT_DISPATCH);
113+
$e->setRequest($request);
114+
$e->setResponse($response);
115+
$e->setTarget($this);
115116

116-
$result = $this->getEventManager()->trigger(MvcEvent::EVENT_DISPATCH, $e, function ($test) {
117+
$result = $this->getEventManager()->triggerEventUntil(function ($test) {
117118
return ($test instanceof Response);
118-
});
119+
}, $e);
119120

120121
if ($result->stopped()) {
121122
return $result->last();

src/Controller/ControllerManager.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use Zend\EventManager\EventManagerAwareInterface;
1313
use Zend\EventManager\EventManagerInterface;
14+
use Zend\EventManager\SharedEventManagerInterface;
1415
use Zend\Mvc\Exception;
1516
use Zend\ServiceManager\AbstractPluginManager;
1617
use Zend\ServiceManager\ConfigInterface;
@@ -73,10 +74,10 @@ public function injectControllerDependencies($controller, ServiceLocatorInterfac
7374
// is why the shared EM injection needs to happen; the conditional
7475
// will always pass.
7576
$events = $controller->getEventManager();
76-
if (!$events instanceof EventManagerInterface) {
77+
if (! $events instanceof EventManagerInterface
78+
|| ! $events->getSharedManager() instanceof SharedEventManagerInterface
79+
) {
7780
$controller->setEventManager($parentLocator->get('EventManager'));
78-
} else {
79-
$events->setSharedManager($parentLocator->get('SharedEventManager'));
8081
}
8182
}
8283

src/Controller/Plugin/Forward.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,9 @@ protected function detachProblemListeners(SharedEvents $sharedEvents)
177177
$results[$id] = [];
178178
foreach ($eventArray as $eventName => $classArray) {
179179
$results[$id][$eventName] = [];
180-
$events = $sharedEvents->getListeners($id, $eventName);
180+
$events = $sharedEvents->getListeners([$id], $eventName);
181181
foreach ($events as $currentEvent) {
182-
$currentCallback = $currentEvent->getCallback();
182+
$currentCallback = $currentEvent;
183183

184184
// If we have an array, grab the object
185185
if (is_array($currentCallback)) {
@@ -193,7 +193,7 @@ protected function detachProblemListeners(SharedEvents $sharedEvents)
193193

194194
foreach ($classArray as $class) {
195195
if ($currentCallback instanceof $class) {
196-
$sharedEvents->detach($id, $currentEvent);
196+
$sharedEvents->detach($currentEvent, $id);
197197
$results[$id][$eventName][] = $currentEvent;
198198
}
199199
}

src/DispatchListener.php

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ class DispatchListener extends AbstractListenerAggregate
4343
* Attach listeners to an event manager
4444
*
4545
* @param EventManagerInterface $events
46+
* @param int $priority
4647
* @return void
4748
*/
48-
public function attach(EventManagerInterface $events)
49+
public function attach(EventManagerInterface $events, $priority = 1)
4950
{
5051
$this->listeners[] = $events->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch']);
5152
if (function_exists('zend_monitor_custom_event_ex')) {
@@ -92,12 +93,14 @@ public function onDispatch(MvcEvent $e)
9293
try {
9394
$return = $controller->dispatch($request, $response);
9495
} catch (\Exception $ex) {
95-
$e->setError($application::ERROR_EXCEPTION)
96-
->setController($controllerName)
97-
->setControllerClass(get_class($controller))
98-
->setParam('exception', $ex);
99-
$results = $events->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $e);
100-
$return = $results->last();
96+
$e->setName(MvcEvent::EVENT_DISPATCH_ERROR);
97+
$e->setError($application::ERROR_EXCEPTION);
98+
$e->setController($controllerName);
99+
$e->setControllerClass(get_class($controller));
100+
$e->setParam('exception', $ex);
101+
102+
$results = $events->triggerEvent($e);
103+
$return = $results->last();
101104
if (! $return) {
102105
$return = $e->getResult();
103106
}
@@ -153,15 +156,16 @@ protected function marshalControllerNotFoundEvent(
153156
Application $application,
154157
\Exception $exception = null
155158
) {
156-
$event->setError($type)
157-
->setController($controllerName)
158-
->setControllerClass('invalid controller class or alias: ' . $controllerName);
159+
$event->setName(MvcEvent::EVENT_DISPATCH_ERROR);
160+
$event->setError($type);
161+
$event->setController($controllerName);
162+
$event->setControllerClass('invalid controller class or alias: ' . $controllerName);
159163
if ($exception !== null) {
160164
$event->setParam('exception', $exception);
161165
}
162166

163167
$events = $application->getEventManager();
164-
$results = $events->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $event);
168+
$results = $events->triggerEvent($event);
165169
$return = $results->last();
166170
if (! $return) {
167171
$return = $event->getResult();
@@ -211,12 +215,13 @@ protected function marshalBadControllerEvent(
211215
Application $application,
212216
\Exception $exception
213217
) {
214-
$event->setError($application::ERROR_EXCEPTION)
215-
->setController($controllerName)
216-
->setParam('exception', $exception);
218+
$event->setName(MvcEvent::EVENT_DISPATCH_ERROR);
219+
$event->setError($application::ERROR_EXCEPTION);
220+
$event->setController($controllerName);
221+
$event->setParam('exception', $exception);
217222

218223
$events = $application->getEventManager();
219-
$results = $events->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $event);
224+
$results = $events->triggerEvent($event);
220225
$return = $results->last();
221226
if (! $return) {
222227
return $event->getResult();

src/HttpMethodListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function __construct($enabled = true, $allowedMethods = [])
5353
/**
5454
* {@inheritdoc}
5555
*/
56-
public function attach(EventManagerInterface $events)
56+
public function attach(EventManagerInterface $events, $priority = 1)
5757
{
5858
if (! $this->isEnabled()) {
5959
return;

src/RouteListener.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ class RouteListener extends AbstractListenerAggregate
1818
* Attach to an event manager
1919
*
2020
* @param EventManagerInterface $events
21+
* @param int $priority
2122
* @return void
2223
*/
23-
public function attach(EventManagerInterface $events)
24+
public function attach(EventManagerInterface $events, $priority = 1)
2425
{
2526
$this->listeners[] = $events->attach(MvcEvent::EVENT_ROUTE, [$this, 'onRoute']);
2627
}
@@ -44,9 +45,10 @@ public function onRoute($e)
4445
$routeMatch = $router->match($request);
4546

4647
if (!$routeMatch instanceof Router\RouteMatch) {
48+
$e->setName(MvcEvent::EVENT_DISPATCH_ERROR);
4749
$e->setError(Application::ERROR_ROUTER_NO_MATCH);
4850

49-
$results = $target->getEventManager()->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $e);
51+
$results = $target->getEventManager()->triggerEvent($e);
5052
if (count($results)) {
5153
return $results->last();
5254
}

src/SendResponseListener.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ public function getEventManager()
6969
* Attach the aggregate to the specified event manager
7070
*
7171
* @param EventManagerInterface $events
72+
* @param int $priority
7273
* @return void
7374
*/
74-
public function attach(EventManagerInterface $events)
75+
public function attach(EventManagerInterface $events, $priority = 1)
7576
{
7677
$this->listeners[] = $events->attach(MvcEvent::EVENT_FINISH, [$this, 'sendResponse'], -10000);
7778
}
@@ -91,7 +92,7 @@ public function sendResponse(MvcEvent $e)
9192
$event = $this->getEvent();
9293
$event->setResponse($response);
9394
$event->setTarget($this);
94-
$this->getEventManager()->trigger($event);
95+
$this->getEventManager()->triggerEvent($event);
9596
}
9697

9798
/**

src/Service/ApplicationFactory.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ class ApplicationFactory implements FactoryInterface
2626
*/
2727
public function createService(ServiceLocatorInterface $serviceLocator)
2828
{
29-
return new Application($serviceLocator->get('Config'), $serviceLocator);
29+
return new Application(
30+
$serviceLocator->get('Config'),
31+
$serviceLocator,
32+
$serviceLocator->get('EventManager'),
33+
$serviceLocator->get('Request'),
34+
$serviceLocator->get('Response')
35+
);
3036
}
3137
}

0 commit comments

Comments
 (0)