Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
	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;
	}
Ejemplo n.º 3
0
 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'));
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 /**
  * 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);
                 }
             }
         }
     }
 }