The MvcEvent¶
The MVC layer of Zend Framework 2 incorporates and utilizes a custom Zend\EventManager\Event implementation - Zend\Mvc\MvcEvent. This event is created during Zend\Mvc\Application::bootstrap() and is passed directly to all the events that method triggers. Additionally, if your controllers implement the Zend\Mvc\InjectApplicationEventInterface, MvcEvent will be injected into those controllers.
The MvcEvent adds accessors and mutators for the following:
- Application object.
- Request object.
- Response object.
- Router object.
- RouteMatch object.
- Result - usually the result of dispatching a controller.
- ViewModel object, typically representing the layout view model.
The methods it defines are:
- setApplication($application)
- getApplication()
- setRequest($request)
- getRequest()
- setResponse($response)
- getResponse()
- setRouter($router)
- getRouter()
- setRouteMatch($routeMatch)
- getRouteMatch()
- setResult($result)
- getResult()
- setViewModel($viewModel)
- getViewModel()
- isError()
- setError()
- getError()
- getController()
- setController($name)
- getControllerClass()
- setControllerClass($class)
The Application, Request, Response, Router, and ViewModel are all injected during the bootstrap event. Following the route event, it will be injected also with the RouteMatch object encapsulating the results of routing.
Since this object is passed around throughout the MVC, it is a common location for retrieving the results of routing, the router, and the request and response objects. Additionally, we encourage setting the results of execution in the event, to allow event listeners to introspect them and utilize them within their execution. As an example, the results could be passed into a view renderer.
Order of events¶
The following events are triggered, in the following order:
Name | Constant | Description |
---|---|---|
bootstrap | MvcEvent::EVENT_BOOTSTRAP | Bootstrap the application by creating the ViewManager. |
route | MvcEvent::EVENT_ROUTE | Perform all the route work (matching...). |
dispatch | MvcEvent::EVENT_DISPATCH | Dispatch the matched route to a controller/action. |
dispatch.error | MvcEvent::EVENT_DISPATCH_ERROR | Event triggered in case of a problem during dispatch process (unknown controller...). |
render | MvcEvent::EVENT_RENDER | Prepare the data and delegate the rendering to the view layer. |
render.error | MvcEvent::EVENT_RENDER_ERROR | Event triggered in case of a problem during the render process (no renderer found...). |
finish | MvcEvent::EVENT_FINISH | Perform any task once everything is done. |
Those events are extensively describe in the following sections.
MvcEvent::EVENT_BOOTSTRAP¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Class | Priority | Method Called | Itself Triggers | Description |
---|---|---|---|---|
Zend\Mvc\View\Http\ViewManager | 10000 | onBootstrap | none | Prepares the view layer (instantiate a Zend\Mvc\View\Http\ViewManager). |
Triggerers¶
This event is triggered by the following classes:
Class | In Method |
---|---|
Zend\Mvc\Application | bootstrap |
MvcEvent::EVENT_ROUTE¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Class | Priority | Method Called | Itself Triggers | Description |
---|---|---|---|---|
Zend\Mvc\ModuleRouteListener | 1 | onRoute | none | This listener determines if the module namespace should be prepended to the controller name. This is the case if the route match contains a parameter key matching the MODULE_NAMESPACE constant. |
Zend\Mvc\RouteListener | 1 | onRoute | MvcEvent::EVENT_DISPATCH_ERROR (if no route is matched) | Tries to match the request to the router and return a RouteMatch object. |
Triggerers¶
This event is triggered by the following classes:
Class | In Method | Description |
---|---|---|
Zend\Mvc\Application | run | It also has a short circuit callback that allows to stop the propagation of the event if an error is raised during the routing. |
MvcEvent::EVENT_DISPATCH¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Console context only¶
Those listeners are only attached in a Console context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Console\InjectNamedConsoleParamsListener | 1000 | injectNamedParams | Merge all the params (route matched params and params in the command) and add them to the Request object. |
Zend\Mvc\View\Console\CreateViewModelListener | -80 | createViewModelFromArray | If the controller action returned an associative array, it casts it to a ConsoleModel object. |
Zend\Mvc\View\Console\CreateViewModelListener | -80 | createViewModelFromString | If the controller action returned a string, it casts it to a ConsoleModel object. |
Zend\Mvc\View\Console\CreateViewModelListener | -80 | createViewModelFromNull | If the controller action returned null, it casts it to a ConsoleModel object. |
Zend\Mvc\View\Console\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ConsoleModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
Http context only¶
Those listeners are only attached in a Http context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Http\CreateViewModelListener | -80 | createViewModelFromArray | If the controller action returned an associative array, it casts it to a ViewModel object. |
Zend\Mvc\View\Http\CreateViewModelListener | -80 | createViewModelFromNull | If the controller action returned null, it casts it to a ViewModel object. |
Zend\Mvc\View\Http\RouteNotFoundStrategy | -90 | prepareNotFoundViewModel | It creates and return a 404 ViewModel. |
Zend\Mvc\View\Http\InjectTemplateListener | -90 | injectTemplate | Inject a template into the view model, if none present. Template is derived from the controller found in the route match, and, optionally, the action, if present. |
Zend\Mvc\View\Http\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ViewModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
All contexts¶
Those listeners are attached for both contexts:
Class | Priority | Method Called | Itself Triggers | Description |
---|---|---|---|---|
Zend\Mvc\DispatchListener | 1 | onDispatch | MvcEvent::EVENT_DISPATCH_ERROR (if an exception is raised during dispatch processes) | Try to load the matched controller from the service manager (and throws various exceptions if it does not). |
Zend\Mvc\AbstractController | 1 | onDispatch | none | The onDispatch method of the AbstractController is an abstract method. In AbstractActionController for instance, it simply calls the action method. |
Triggerers¶
This event is triggered by the following classes:
Class | In Method | Description |
---|---|---|
Zend\Mvc\Application | run | It also has a short circuit callback that allows to stop the propagation of the event if an error is raised during the routing. |
Zend\Mvc\Controller\AbstractController | dispatch | If a listener returns a Response object, it stops propagation. Note: every AbstractController listen to this event and execute the onDispatch method when it is triggered. |
MvcEvent::EVENT_DISPATCH_ERROR¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Console context only¶
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Console\RouteNotFoundStrategy | 1 | handleRouteNotFoundError | Detect if an error is a route not found condition. If a “controller not found” or “invalid controller” error type is encountered, sets the response status code to 404. |
Zend\Mvc\View\Console\ExceptionStrategy | 1 | prepareExceptionViewModel | Create an exception view model and set the status code to 404. |
Zend\Mvc\View\Console\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ConsoleModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
Http context only¶
Those listeners are only attached in a Http context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Http\RouteNotFoundStrategy | 1 | detectNotFoundError | Detect if an error is a 404 condition. If a “controller not found” or “invalid controller” error type is encountered, sets the response status code to 404. |
Zend\Mvc\View\Http\RouteNotFoundStrategy | 1 | prepareNotFoundViewModel | Create and return a 404 view model. |
Zend\Mvc\View\Http\ExceptionStrategy | 1 | prepareExceptionViewModel | Create an exception view model and set the status code to 404 |
Zend\Mvc\View\Http\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ViewModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
All contexts¶
Those listeners are attached for both contexts:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\DispatchListener | 1 | reportMonitorEvent | Used to monitoring when Zend Server is used. |
Triggerers¶
Class | In Method |
---|---|
Zend\Mvc\DispatchListener | onDispatch |
Zend\Mvc\DispatchListener | marshallControllerNotFoundEvent |
Zend\Mvc\DispatchListener | marshallBadControllerEvent |
MvcEvent::EVENT_RENDER¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Console context only¶
Those listeners are only attached in a Console context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Console\DefaultRenderingStrategy | -10000 | render | Render the view. |
Http context only¶
Those listeners are only attached in a Http context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Http\DefaultRenderingStrategy | -10000 | render | Render the view. |
Triggerers¶
This event is triggered by the following classes:
Class | In Method | Description |
---|---|---|
Zend\Mvc\Application | completeRequest | This event is triggered just before the MvcEvent::FINISH event. |
MvcEvent::EVENT_RENDER_ERROR¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Console context only¶
Those listeners are only attached in a Console context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Console\ExceptionStrategy | 1 | prepareExceptionViewModel | Create an exception view model and set the status code to 404. |
Zend\Mvc\View\Console\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ConsoleModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
Http context only¶
Those listeners are only attached in a Http context:
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\View\Console\ExceptionStrategy | 1 | prepareExceptionViewModel | Create an exception view model and set the status code to 404. |
Zend\Mvc\View\Console\InjectViewModelListener | -100 | injectViewModel | Inserts the ViewModel (in this case, a ViewModel) and adds it to the MvcEvent object. It either (a) adds it as a child to the default, composed view model, or (b) replaces it if the result is marked as terminable. |
Triggerers¶
This event is triggered by the following classes:
Class | In Method | Description |
---|---|---|
Zend\Mvc\View\Http\DefaultRenderingStrategy | render | This event is triggered if an exception is raised during rendering. |
MvcEvent::EVENT_FINISH¶
Listeners¶
The following classes are listening to this event (they are sorted from higher priority to lower priority):
Class | Priority | Method Called | Description |
---|---|---|---|
Zend\Mvc\SendResponseListener | -10000 | sendResponse | It triggers the SendResponseEvent in order to prepare the response (see the next page for more information about SendResponseEvent). |
Triggerers¶
This event is triggered by the following classes:
Class | In Method | Description |
---|---|---|
Zend\Mvc\Application | run | This event is triggered once the MvcEvent::ROUTE event returns a correct ResponseInterface. |
Zend\Mvc\Application | run | This event is triggered once the MvcEvent::DISPATCH event returns a correct ResponseInterface. |
Zend\Mvc\Application | completeRequest | This event is triggered after the MvcEvent::RENDER (this means that, at this point, the view is already rendered). |