/** * 分发请求到对象的方法 */ public function dispatch($handler, $require_oauth = false, $request = null) { // 检查handler if (!is_string($handler)) { throw new PrismException('No handler given to dispatcher'); } // 创建Request和Response if (!$request) { $request = new Request(); } $response = new Response($request->getRequestID()); // oauth判断 if ($require_oauth && !$request->getOauth()) { $response->setError('Invalid Request', 'Oauth is required')->send(); } // 使用middlewares foreach ($this->middlewares as $middleware) { list($class_name, $action_name) = explode('@', $middleware); call_user_func(array(new $class_name(), $action_name), $request, $response); } // 清理不需要的params if ($this->routing_key) { unset($request->params[$this->routing_key]); } // 解析对象名和方法名 list($class_name, $action_name) = explode('@', $handler); // 执行方法 call_user_func(array(new $class_name(), $action_name), $request, $response); }