www.foo.com/blog/posts/view/12/12/2013
没有可能的文件对应此请求。因此,这个URL需要通过某种逻辑进行解析,否则就会获得404。
由于没有相应的文件,服务器无法自动响应。我只是想知道Cake FIRST的哪一部分响应这样的请求。我理解简单页面请求首先由路由器解析和解析。但URL不能只是神奇地到达路由器的前门,对吗?我真的想知道将URL带到路由器的场景背后发生了什么。
答案 0 :(得分:1)
检查你的app / webroot / index.php,底部:
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
new CakeRequest(),
new CakeResponse()
);
Dispatcher的关键方法是parseParams。这个方法在Dispatcher :: dispatch()开始时通过事件系统触发,同时在类中检查该方法。
基本上,调度程序使用路由器解析普通URL并将其转换为params并将解析后的结果添加到请求对象,然后根据解析结果调度控制器。
/**
* Applies Routing and additionalParameters to the request to be dispatched.
* If Routes have not been loaded they will be loaded, and app/Config/routes.php will be run.
*
* @param CakeEvent $event containing the request, response and additional params
* @return void
*/
public function parseParams($event) {
$request = $event->data['request'];
Router::setRequestInfo($request);
$params = Router::parse($request->url);
$request->addParams($params);
if (!empty($event->data['additionalParams'])) {
$request->addParams($event->data['additionalParams']);
}
}