示例#1
0
 public static function dispatch(rtAppConfig $config)
 {
     // Load the project's config
     Rythm::init();
     // Load the application's config
     // Route the request
     rtRoute::route();
     //============================================================
     // Start Handle the request
     //============================================================
     // Initial middleware classes
     $middleware_classes = rtConfig::get('middlewares', array());
     $middlewares = array();
     foreach ($middleware_classes as $middleware_class) {
         require_once "middleware/{$middleware_class}.php";
         $middlewares[] = new $middleware_class();
     }
     // ===========================================
     // middleware start process request
     $request = rtRequest::getInstance();
     foreach ($middlewares as $middleware) {
         if (method_exists($middleware, 'process_request')) {
             $middleware->process_request($request);
         }
     }
     // middleware end process request
     // ===========================================
     // Core Process
     $controller = $request->getController();
     $action = $request->getAction();
     $controller_class = ucfirst($controller) . 'Controller';
     if (!class_exists($controller_class)) {
         throw new rtException("Can't find Controller: {$controller_class}");
     }
     $controller = new $controller_class();
     if (!$controller instanceof rtController) {
         throw new rtException("Controller:{$controller_class} must extend from rtController class");
     }
     $controller->execute($action . 'Action', $request);
     // End Core Process
     // ===========================================
     // start process response
     $response = rtResponse::getInstance();
     // response middleware process in the reverse direction
     foreach (array_reverse($middlewares) as $middleware) {
         if (method_exists($middleware, 'process_response')) {
             $middleware->process_response($response);
         }
     }
     // end process response
 }