コード例 #1
0
 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);
 }