如何将URL传递到Cake中的路由器?

时间:2013-12-11 14:47:47

标签: cakephp cakephp-2.4

www.foo.com/blog/posts/view/12/12/2013

没有可能的文件对应此请求。因此,这个URL需要通过某种逻辑进行解析,否则就会获得404。

由于没有相应的文件,服务器无法自动响应。我只是想知道Cake FIRST的哪一部分响应这样的请求。我理解简单页面请求首先由路由器解析和解析。但URL不能只是神奇地到达路由器的前门,对吗?我真的想知道将URL带到路由器的场景背后发生了什么。

1 个答案:

答案 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']);
                }
        }