function testMatch() { $request = new HTTPRequest("GET", "admin/crm/add"); /* When a rule matches, but has no variables, array("_matched" => true) is returned. */ $this->assertEquals(array("_matched" => true), $request->match('admin/crm', true)); /* Becasue we shifted admin/crm off the stack, just "add" should be remaining */ $this->assertEquals("add", $request->remaining()); $this->assertEquals(array("_matched" => true), $request->match('add', true)); }
public function handleRequest($request) { self::$is_at_root = true; $this->pushCurrent(); $this->init(); $controller = new ModelAsController(); $request = new HTTPRequest("GET", self::get_homepage_urlsegment().'/', $request->getVars(), $request->postVars()); $request->match('$URLSegment//$Action', true); $result = $controller->handleRequest($request); $this->popCurrent(); return $result; }
public function testFindOldPage() { $page = new Page(); $page->Title = 'Test Page'; $page->URLSegment = 'test-page'; $page->write(); $page->publish('Stage', 'Live'); $page->URLSegment = 'test'; $page->write(); $page->publish('Stage', 'Live'); $router = new ModelAsController(); $request = new HTTPRequest('GET', 'test-page/action/id/otherid'); $request->match('$URLSegment/$Action/$ID/$OtherID'); $response = $router->handleRequest($request); $this->assertEquals($response->getHeader('Location'), Controller::join_links(Director::baseURL() . 'test/action/id/otherid')); }
public function handleRequest($request) { self::$is_at_root = true; $this->pushCurrent(); $this->init(); // If the basic database hasn't been created, then build it. if (!DB::isActive() || !ClassInfo::hasTable('SiteTree')) { $this->response = new HTTPResponse(); $this->redirect("dev/build?returnURL="); return $this->response; } $controller = new ModelAsController(); $request = new HTTPRequest("GET", self::get_homepage_urlsegment() . '/', $request->getVars(), $request->postVars()); $request->match('$URLSegment//$Action', true); $result = $controller->handleRequest($request); $this->popCurrent(); return $result; }
/** * Handle an HTTP request, defined with a HTTPRequest object. * * @return HTTPResponse|string */ protected static function handleRequest(HTTPRequest $request, Session $session) { krsort(Director::$rules); if (isset($_REQUEST['debug'])) { Debug::show(Director::$rules); } foreach (Director::$rules as $priority => $rules) { foreach ($rules as $pattern => $controllerOptions) { if (is_string($controllerOptions)) { if (substr($controllerOptions, 0, 2) == '->') { $controllerOptions = array('Redirect' => substr($controllerOptions, 2)); } else { $controllerOptions = array('Controller' => $controllerOptions); } } if (($arguments = $request->match($pattern, true)) !== false) { // controllerOptions provide some default arguments $arguments = array_merge($controllerOptions, $arguments); // Find the controller name if (isset($arguments['Controller'])) { $controller = $arguments['Controller']; } // Pop additional tokens from the tokeniser if necessary if (isset($controllerOptions['_PopTokeniser'])) { $request->shift($controllerOptions['_PopTokeniser']); } // Handle redirections if (isset($arguments['Redirect'])) { return "redirect:" . Director::absoluteURL($arguments['Redirect'], true); } else { /* if(isset($arguments['Action'])) { $arguments['Action'] = str_replace('-','',$arguments['Action']); } if(isset($arguments['Action']) && ClassInfo::exists($controller.'_'.$arguments['Action'])) $controller = $controller.'_'.$arguments['Action']; */ if (isset($arguments['URLSegment'])) { self::$urlSegment = $arguments['URLSegment'] . "/"; } Director::$urlParams = $arguments; $controllerObj = new $controller(); $controllerObj->setSession($session); return $controllerObj->handleRequest($request); } } } } }