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); }