2013-12-11 5 views
0

www.foo.com/blog/posts/view/12/12/2013URL은 Cake의 라우터로 어떻게 전달됩니까?

이 요청에 해당하는 파일이 없습니다. 따라서이 URL을 일부 논리로 구문 분석해야하거나 그렇지 않으면 404가 표시됩니다.

해당 파일이 없으므로 서버에서 응답을 자동화 할 수 없습니다. 나는 Cake FIRST의 어떤 부분이 이와 같은 요청에 응답하는지 궁금합니다. 단순한 페이지 요청이 먼저 라우터에 의해 구문 분석되고 해결된다는 것을 알고 있습니다. 그러나 URL은 마술처럼 라우터 앞문으로 들어갈 수 없습니다. 라우터에 URL을 가져 오는 장면 뒤에 무엇이 일어나고 있는지 정말 알고 싶습니다.

+0

정확한 질문을하십시오. 귀하의 현재 하나가 너무 광범위하고 당신이 무엇에 관심이 있는지 불분명합니다. – fuesika

답변

1

앱/웹 루트/index.php에, 바닥 확인 :

$Dispatcher = new Dispatcher(); 
$Dispatcher->dispatch(
    new CakeRequest(), 
    new CakeResponse() 
); 

디스패처의 주요 방법은 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']); 
       } 
     } 
관련 문제