Zend\Mvc\MiddlewareListener::onDispatch PHP Method

onDispatch() public method

Listen to the "dispatch" event
public onDispatch ( MvcEvent $event ) : mixed
$event MvcEvent
return mixed
    public function onDispatch(MvcEvent $event)
    {
        $routeMatch = $event->getRouteMatch();
        $middleware = $routeMatch->getParam('middleware', false);
        if (false === $middleware) {
            return;
        }
        $request = $event->getRequest();
        $application = $event->getApplication();
        $response = $application->getResponse();
        $serviceManager = $application->getServiceManager();
        $middlewareName = is_string($middleware) ? $middleware : get_class($middleware);
        if (is_string($middleware) && $serviceManager->has($middleware)) {
            $middleware = $serviceManager->get($middleware);
        }
        if (!is_callable($middleware)) {
            $return = $this->marshalMiddlewareNotCallable($application::ERROR_MIDDLEWARE_CANNOT_DISPATCH, $middlewareName, $event, $application);
            $event->setResult($return);
            return $return;
        }
        $caughtException = null;
        try {
            $return = $middleware(Psr7Request::fromZend($request), Psr7Response::fromZend($response));
        } catch (\Throwable $ex) {
            $caughtException = $ex;
        } catch (\Exception $ex) {
            // @TODO clean up once PHP 7 requirement is enforced
            $caughtException = $ex;
        }
        if ($caughtException !== null) {
            $event->setName(MvcEvent::EVENT_DISPATCH_ERROR);
            $event->setError($application::ERROR_EXCEPTION);
            $event->setController($middlewareName);
            $event->setControllerClass(get_class($middleware));
            $event->setParam('exception', $caughtException);
            $events = $application->getEventManager();
            $results = $events->triggerEvent($event);
            $return = $results->last();
            if (!$return) {
                $return = $event->getResult();
            }
        }
        if (!$return instanceof PsrResponseInterface) {
            $event->setResult($return);
            return $return;
        }
        $response = Psr7Response::toZend($return);
        $event->setResult($response);
        return $response;
    }