/** * Get and/or set the View * * This method declares the View to be used by the Slim application. * If the argument is a string, Slim will instantiate a new object * of the same class. If the argument is an instance of View or a subclass * of View, Slim will use the argument as the View. * * If a View already exists and this method is called to create a * new View, data already set in the existing View will be * transferred to the new View. * * @param string|Slim_View $viewClass The name or instance of a Slim_View class * @return Slim_View */ public function view($viewClass = null) { if (!is_null($viewClass)) { $existingData = is_null($this->view) ? array() : $this->view->getData(); if ($viewClass instanceof Slim_View) { $this->view = $viewClass; } else { $this->view = new $viewClass(); } $this->view->appendData($existingData); $this->view->setTemplatesDirectory($this->config('templates.path')); } return $this->view; }
/** * Run the Slim application * * This method is the "meat and potatoes" of Slim and should be the last * method called. This fires up Slim, invokes the Route that matches * the current request, and returns the response to the client. * * This method will invoke the Not Found handler if no matching * routes are found. * * This method will also catch any unexpected Exceptions thrown by this * application; the Exceptions will be logged to this application's log * and rethrown to the global Exception handler. * * @return void */ public function run() { try { $this->applyHook('slim.before'); ob_start(); $this->applyHook('slim.before.router'); $dispatched = false; foreach ($this->router->getMatchedRoutes() as $route) { try { $this->applyHook('slim.before.dispatch'); $dispatched = $route->dispatch(); $this->applyHook('slim.after.dispatch'); if ($dispatched) { break; } } catch (Slim_Exception_Pass $e) { continue; } } if (!$dispatched) { $this->notFound(); } $this->response()->write(ob_get_clean()); $this->applyHook('slim.after.router'); $this->view->getData('flash')->save(); session_write_close(); $this->response->send(); $this->applyHook('slim.after'); } catch (Slim_Exception_RequestSlash $e) { try { $this->redirect($this->request->getRootUri() . $this->request->getResourceUri() . '/', 301); } catch (Slim_Exception_Stop $e2) { //Ignore Slim_Exception_Stop and exit application context } } catch (Slim_Exception_Stop $e) { //Exit application context } catch (Exception $e) { $this->getLog()->error($e); try { if ($this->config('debug') === true) { $this->halt(500, self::generateErrorMarkup($e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString())); } else { $this->error($e); } } catch (Slim_Exception_Stop $e2) { //Ignore Slim_Exception_Stop and exit application context } } }
/** * Run the Slim application * * This method is the "meat and potatoes" of Slim and should be the last * method called. This fires up Slim, invokes the Route that matches * the current request, and returns the response to the client. * * This method will invoke the Not Found handler if no matching * routes are found. * * This method will also catch any unexpected Exceptions thrown by this * application; the Exceptions will be logged to this application's log * and rethrown to the global Exception handler. * * @return void */ public function run() { try { try { $this->applyHook('slim.before'); ob_start(); $this->applyHook('slim.before.router'); $dispatched = false; $httpMethod = $this->request()->getMethod(); $httpMethodsAllowed = array(); foreach ($this->router as $route) { if ($route->supportsHttpMethod($httpMethod)) { try { $this->applyHook('slim.before.dispatch'); $dispatched = $route->dispatch(); $this->applyHook('slim.after.dispatch'); if ($dispatched) { break; } } catch (Slim_Exception_Pass $e) { continue; } } else { $httpMethodsAllowed = array_merge($httpMethodsAllowed, $route->getHttpMethods()); } } if (!$dispatched) { if ($httpMethodsAllowed) { $this->response()->header('Allow', implode(' ', $httpMethodsAllowed)); $this->halt(405); } else { $this->notFound(); } } $this->response()->write(ob_get_clean()); $this->applyHook('slim.after.router'); $this->view->getData('flash')->save(); session_write_close(); $this->response->send(); $this->applyHook('slim.after'); } catch (Slim_Exception_RequestSlash $e) { $this->redirect($this->request->getRootUri() . $this->request->getResourceUri() . '/', 301); } catch (Exception $e) { if ($e instanceof Slim_Exception_Stop) { throw $e; } $this->getLog()->error($e); if ($this->config('debug') === true) { $this->halt(500, self::generateErrorMarkup($e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString())); } else { $this->error($e); } } } catch (Slim_Exception_Stop $e) { //Exit application context } }