/** * @param Request $request * @param Response $response * @return string * @throws RuntimeException */ public function render(Request $request, Response $response) { $view = $response->getView(); if (!$view instanceof View) { throw new RuntimeException('No View object set; unable to render view'); } $response->setContentTypeHeader('html'); $dir = strtolower($request->getController()); if (null !== $view->getScriptDir()) { $dir = $view->getScriptDir(); } $filename = strtolower($request->getAction()); if (null !== $view->getScript()) { $filename = $view->getScript(); } $scriptFile = sprintf('%s/views/%s/%s.phtml', APP_DIR, $dir, $filename); $scriptFile = str_replace('/', DIRECTORY_SEPARATOR, $scriptFile); if (!file_exists($scriptFile)) { throw new RuntimeException('View script not found: ' . $scriptFile); } unset($dir, $filename); ob_start(); include $scriptFile; $body = ob_get_clean(); if (null !== $view->getLayout()) { $layoutFile = sprintf('%s/views/layout/%s.phtml', APP_DIR, $view->getLayout()->getScript()); $layoutFile = str_replace('/', DIRECTORY_SEPARATOR, $layoutFile); if (file_exists($layoutFile)) { $view->layout()->content = $body; unset($viewScript, $body); ob_start(); include $layoutFile; $body = ob_get_clean(); } } return $body; }