2014-01-22 3 views
-1

일부 사이트는 example.com이며 다른 도시 (예 : example.com/city1, example.com/city2)에 대한 노선을 만들고 싶습니다.Cakephp 멀티 레벨 라우팅

또한 현재 도시의 다른 모든 컨트롤러와 방법을 표시하려고합니다 (예 : example.com/city1/:controller/:action, example.com/city2/:controller/:action).

이것은 컨트롤러에서 동일한 방법을 사용하지만 도시에 따라 다른 정보를 표시하는 2 개 이상의 다른 사이트처럼 보입니다.

도시가 10 개를 초과 할 수 있으므로 라우터 접두사가 작동하지 않으며 컨트롤러에서 동일한 방법을 사용해야합니다.

관리자 패널에서 도시를 추가 할 수 있습니다.

우리는 어떻게 도시에서 데이터베이스를 가져 와서 모든 링크를 올바르게 표시 할 경로를 만들 수 있습니까?

+0

항변 : 컨트롤러에

// routes.php Router::connect( '/cities/:city/:controller/:action/:id', array(), array( // order matters since this will simply map ":id" to // $articleId in your action 'pass' => array('id', 'city'), 'id' => '[0-9]+' ) ); 

을 se는 이미 시도한 코드와 문제점을 보여줍니다. –

+0

@imim 나는 이것을 시도했다 : $ options = array ('city'=> 'phoenix | columbus | detroit'); Router :: connect ('/ : city/: controller/: action/*', array(), $ options); 라우터 :: 연결 ('/ : 도시', 배열 ('컨트롤러'=> 'someControllerName', '동작'=> '인덱스'), $ 옵션); 매개 변수 : city를 다른 맞춤 경로에 추가하되 더 나은 해결책을 찾고 싶습니다. – Igor

답변

0
Router::connect('/:city/:controller/:action/*', array()); 
Router::connect('/:city/:controller/*', array()); 

경로에 프리픽스가 추가되지만 모든 URL이 영향을받습니다. 아마도 더 쉬운 방법 일 것입니다.

example.com/users/login 대신 example.com/New-York/users/login이 있어야합니다.

이러한 모든 링크를 생성하려면 사용중인 컨트롤러 및 방법의 종류를 알려주십시오.

라우트는 내가, 당신이 당신의 URL 방식을 조금 변경 제안 example.com/cities/city1 대신 example.com/city1을 사용하십시오 접두어 (도시 이름)에 대한 작업

+0

감사합니다. 비슷한 것을 만들었습니다. 그러나 이것이 최선의 해결책인지 확신 할 수 없습니다. – Igor

0

을 붙여. 이 변경으로 인해 라우팅/다시 쓰기가 쉬워 질뿐만 아니라 우연히 컨트롤러와 동일한 이름을 가진 도시를 추가 할 가능성도 배제됩니다!

(물론이 원래 이름 지정 체계를 유지하는 몇 가지 방법이 될 것입니다,하지만 구현하고 컨트롤러 이름과 충돌의 위험이 더 어려울 것) 당신은/도시했으면

을 일부이 같은 (샘플 코드는 단지 당신에게 아이디어를주고, 테스트 CakePHP Routing에서 가져온되지 않음) 할 수있는가에 :

public function view($articleId = null, $city = null) { 
    // some code here... 
} 
+0

답변 해 주셔서 감사합니다.하지만 단어 도시가없는 제 질문에서 언급 한 경로 만 있으면됩니다. – Igor