/**
* 调用路由规则匹配的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();
}