/** * Dispatch a request from Apache * * Called from file dispatch.php, which is invoked by * {@link http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html Apache mod_rewrite} * whenever a client makes a request. Actions: * <ol> * <li>Remove forbidden tags and attributes from * {@link http://www.php.net/reserved.variables#reserved.variables.get $_GET}, * {@link http://www.php.net/reserved.variables#reserved.variables.post $_POST} and * {@link http://www.php.net/reserved.variables#reserved.variables.request $_REQUEST}. </li> * <li>Start a session to keep track of state between requests from * the client.</li> * <li>Construct an ActionController to process the action.</li> * <li>Process the route</li> * </ol> * @uses ActionController::__construct() * @uses ActionController::process_route() * @uses ActionController::process_with_exception() * @uses InputFilter::process_all() * @uses Session::start() */ function dispatch() { if (TRAX_ENV != 'production') { $start = microtime(true); } try { InputFilter::process_all(); Session::start(); $ac = new ActionController(); $ac->process_route(); } catch (Exception $e) { ActionController::process_with_exception($e); } if (TRAX_ENV != 'production') { $duration = "(" . round((microtime(true) - $start) * 1000, 1) . "ms)"; $url = parse_url($_SERVER['REQUEST_URI']); Trax::log("[1mRendered {$url['path']} {$duration}[0m"); } }
/** * Test process_route() with missing controller class */ public function testProcess_route_missing_class() { // read routes from config/routes.php $ac = new ActionController(); // this URL matches default route, but the controller // file doesn't have a Noclass class $_SERVER['REDIRECT_URL'] = '/~haas/noclass/foo/bar'; try { $ac->process_route(); } catch (Exception $e) { return; $this->assertTrue(is_a($e, 'ActionControllerError')); $this->assertEquals('Error Message: Failed to instantiate' . ' controller object "noclass"', $e->getMessage()); $this->assertEquals('Error Message: Failed to instantiate' . ' controller object "noclass"', $e->error_message); $this->assertEquals('ActionController error', $e->error_heading); $this->assertEquals('500', $e->error_code); return; } $this->fail('process_route() missing class exception not raised'); }