/** * @param Request $request * @throws DataNotSet */ public function dispatch(Request $request = null) { if ($this->isFirstDispatch) { $this->isFirstDispatch = false; $this->trigger('dispatch:first'); } // Trigger initialize $this->trigger('dispatch:initialize'); // Check locales $this->checkLocale(); if (!isset($this->router)) { throw new DataNotSet("Application needs a router."); } if (!isset($request)) { $request = Request::fromInput(); } // Set session from the session handler $session = new Session($this->getSessionHandler()); $session->connect(); // Set session in request $request->setSession($session); // Trigger before $this->trigger('dispatch:before', $request); // Run router $this->router->run($request); // Trigger dispatch $this->trigger('dispatch:after', $request); // Disconnect the session $session->disconnect(); // End $this->trigger('dispatch:terminate'); }