PPI\Framework\App::dispatch PHP Метод

dispatch() публичный Метод

Decide on a route to use and dispatch our module's controller action.
public dispatch ( PPI\Framework\Http\Request $request, PPI\Framework\Http\Response $response ) : PPI\Framework\Http\Response
$request PPI\Framework\Http\Request
$response PPI\Framework\Http\Response
Результат PPI\Framework\Http\Response
    public function dispatch(HttpRequest $request, HttpResponse $response)
    {
        if (false === $this->booted) {
            $this->boot();
        }
        // cache like a mother fucker
        //        if(!$this->hasRouteInCache($request)) {
        $routeParams = $this->handleRouting($request);
        //            $this->setRouteInCache($request, $routeParams);
        // @todo - move these 2 lines to setRouteInCache()
        //            $routingCache = $this->serviceManager->get('RoutingCache');
        //            $routingCache->set($request->getPathInfo(), $routeParams);
        //        } else {
        //            $routeParams = $this->getRouteFromCache($request);
        //        }
        $request->attributes->add($routeParams);
        // Resolve our Controller
        $resolver = $this->serviceManager->get('ControllerResolver');
        if (false === ($controller = $resolver->getController($request))) {
            throw new NotFoundHttpException(sprintf('Unable to find the controller for path "%s".', $request->getPathInfo()));
        }
        $controllerArguments = $resolver->getArguments($request, $controller);
        $result = call_user_func_array($controller, $controllerArguments);
        if ($result === null) {
            throw new \Exception('Your action returned null. It must always return something');
        } elseif (is_string($result)) {
            $response->setContent($result);
        } elseif ($result instanceof SymfonyResponse || $response instanceof HttpResponse) {
            $response = $result;
        } else {
            throw new \Exception('Invalid response type returned from controller');
        }
        return $response;
    }