protected function generateResponseForException(RhubarbException $er) { $urlHandler = UrlHandler::getExecutingUrlHandler(); if ($urlHandler) { return $urlHandler->generateResponseForException($er); } else { $response = new HtmlResponse(); $response->setContent("<p>The application failed to start. Please consult the shutdown error log for more details"); return $response; } }
public function __construct($folderOrFilePath, $children = []) { parent::__construct($children); $this->folderOrFilePath = rtrim($folderOrFilePath, "/"); if (!file_exists($this->folderOrFilePath)) { throw new StaticResourceNotFoundException($this->folderOrFilePath); } if (is_dir($this->folderOrFilePath)) { $this->isFolder = true; } }
public function __construct($modelName, $children = []) { $this->modelName = $modelName; parent::__construct($children); }
/** * Return the response when appropriate or false if no response could be generated. * * If child handlers are present they are given priority. * * @param mixed $request * @param bool|string $currentUrlFragment * @return bool|Response */ public function generateResponse($request = null, $currentUrlFragment = false) { if ($currentUrlFragment === false) { $currentUrlFragment = $request->urlPath; } if (!$this->matchesRequest($request, $currentUrlFragment)) { return false; } UrlHandler::setExecutingUrlHandler($this); Log::debug(function () { return "Handler " . get_class($this) . " selected to generate response"; }, "ROUTER"); Log::indent(); $context = new PhpContext(); $context->UrlHandler = $this; $this->matchingUrl = $this->getMatchingUrlFragment($request, $currentUrlFragment); if ($this->parentHandler) { $this->handledUrl = $this->parentHandler->handledUrl . $this->matchingUrl; } else { $this->handledUrl = $this->matchingUrl; } $childUrlFragment = substr($currentUrlFragment, strlen($this->matchingUrl)); foreach ($this->childUrlHandlers as $childHandler) { $response = $childHandler->generateResponse($request, $childUrlFragment); if ($response !== false) { return $response; } } $response = $this->generateResponseForRequest($request, $currentUrlFragment); Log::debug(function () use($response) { if ($response !== false) { return "Response generated by handler"; } return "Handler deferred generation"; }, "ROUTER"); Log::outdent(); return $response; }
public function __construct(LoginProvider $loginProvider, $loginUrl, $children = []) { $this->loginProvider = $loginProvider; $this->loginUrl = $loginUrl; parent::__construct($children); }
protected function generateResponseForRequest($request = null, $currentUrlFragment = "") { if ($request !== null && $request->IsWebRequest) { $url = $currentUrlFragment; } else { $url = null; } if (stripos($url, $this->url) !== 0) { return false; } $relevantUrl = preg_replace("|^" . $this->url . "|", "", $url); // Make sure the url we consider ends in a slash. Later we'll redirect the user // to this URL if we find a target (to make sure relative urls work properly in all // cases). $redirectTo = false; if (strlen($relevantUrl) > 0) { if ($relevantUrl[strlen($relevantUrl) - 1] != "/") { $redirectTo = $url . "/"; $relevantUrl .= "/"; } } $urlParts = explode("/", $relevantUrl); $folderUrl = "/"; foreach ($urlParts as $part) { // Sanitise the last part of the url to translate more URL like names to more class like names $classPart = $this->convertUrlToClassName($part); $objectUrl = $folderUrl . $classPart; $objectClass = "\\" . $this->namespace . str_replace("/", "\\", $objectUrl); if (class_exists($objectClass)) { if ($redirectTo !== false) { UrlHandler::redirectToUrl($this->BuildCompleteChildUrl($redirectTo)); } $object = new $objectClass(); if (is_a($object, "\\Rhubarb\\Crown\\Response\\GeneratesResponse")) { return $this->onTargetFound($object, $request); } } $folderUrl .= $part . "/"; } return $this->onNoTargetFound($request, $currentUrlFragment); }
private function addUrlHandler($url, UrlHandler $handler, $children = []) { // If $url is numeric then most likely the $handler can report it's own URL if (!is_numeric($url)) { $handler->setUrl($url); } $name = $handler->getName(); if ($name) { $this->urlHandlers[$name] = $handler; } else { $this->urlHandlers[] = $handler; } }
private function addUrlHandler($url, UrlHandler $handler, $children = []) { $handler->setUrl($url); $name = $handler->getName(); if ($name) { $this->urlHandlers[$name] = $handler; } else { $this->urlHandlers[] = $handler; } }