/**
  * TODO
  * 
  * @param string $uri
  * @return string
  */
 public function dispatch($uri = null)
 {
     $router = $this->getRouter();
     $request = new EhrlichAndreas_Mvc_Request($uri);
     $this->setBaseUrl($request->getBaseUrl());
     $request = $router->route($request);
     $this->setRequest($request);
     $response = $this->runByParameter($request);
     $this->getView()->assign('maincontent', $response);
     $layout = $this->getView()->getLayout();
     return $this->getView()->render($layout, true);
 }
 /**
  * Find a matching route to the current PATH_INFO and inject
  * returning values to the Request object.
  *
  * @throws EhrlichAndreas_Mvc_Exception
  * @return EhrlichAndreas_Mvc_Request Request object
  */
 public function route($request)
 {
     if ($this->_useDefaultRoutes) {
         $this->addDefaultRoutes();
     }
     if (!is_object($request)) {
         $request = new EhrlichAndreas_Mvc_Request($request);
     }
     // Find the matching route
     $routeMatched = false;
     $match = $request->getPathInfo();
     foreach (array_reverse($this->_routes, true) as $name => $route) {
         if ($params = $route->match($match)) {
             $this->_setRequestParams($request, $params);
             $this->_currentRoute = $name;
             $routeMatched = true;
             break;
         }
     }
     if (!$routeMatched) {
         throw new EhrlichAndreas_Mvc_Exception('No route matched the request', 404);
     }
     if ($this->_useCurrentParamsAsGlobal) {
         $params = $request->getParams();
         foreach ($params as $param => $value) {
             $this->setGlobalParam($param, $value);
         }
     }
     return $request;
 }