/** * 调用路由规则匹配的api * @param Request $request * @param Response $respond * @return void */ public function __invoke($request = null, &$respond = null) { if ($request === null) { $request = new Request(null, $this->url_begin); } if ($respond == null) { $respond = new Response(); } $request['$.router'] = $this; //先按配置的顺序调用hook foreach ($this->hook_routes as $hook) { $res = new BufferedRespond(); if (!$this->invokeRoute($hook, $request, $res)) { continue; } $respond->append($res->getBuffer()); $break = false; $respond->flush('break', function ($var) use(&$break) { $break = $var; }); if ($break) { Logger::info("invoke break"); $respond->flush(); return; } } $res = new BufferedRespond(); Verify::isTrue($this->invokeRoute($this->routes, $request, $res), new NotFound()); $respond->append($res->getBuffer()); $respond->flush(); }