2011-04-27 2 views
0

다음 URL에 연결하려고합니다.CakePhp 라우터 : connect, 나는 구문을 얻지 못한다.

1) /happiness/tips/best_tips
2) /happiness/tips/best_tips

다음 개체에 : 1) controller=tips/action=index/passed_parameters=food
2) controller=tips/action=index/passed_parameters=(happiness,best_tips)

--edit--
이 경로는 고정되어 있지 않습니다.
의미 : 내가하려고하는 것은 tips 액션을 가지고있는 모든 URL을 팁 컨트롤러로, 고정 된 (인덱스가 충분하다) 액션으로 라우팅하고, 원래 호출에서와 같이 URL의 나머지 부분을 연결하는 것입니다 . /any_controller/tips/any_param ~ /tips/index/any_params
- 끝 편집 -

이제 어떤 의미가 있기를 바랍니다.

어떻게해야합니까? (제발 - 또한 설명)

감사

답변

1

라우팅은 모두 Router :: connect ('잡을 것', '보낼 곳')을 통해 수행됩니다.

그래서 그것은 간단한 될 수 :

Router::connect('/food/tips/*', array('controller' => 'tips', 'action' => 'index', 'food'); 

첫 번째 방법은 문자열 인수를, 다른로 전달 (URL 작성 내장 케이크를 사용)

Router::connect('/food/tips', '/tips/index/food'); 

또는 바람직한 방법 당신이 컨트롤러에서 그것을 잡아야하고, url을 통해 전달 된 매개 변수를 기대해야한다. 두 번째가 바람직 때문에 적절한 서식 및 미래의 유연성 (내가 믿는)에 :

두 번째 방법은 키 컨트롤러와 액션과 배열을 취하는 이전 URL에 내장 된 케이크를 사용 (http://api.cakephp.org/class/router#method-Routerurl 다른 옵션이 있습니다).

두 번째 메서드에서 전달 된 매개 변수는 배열에서 이름이 지정되지 않은 항목으로 전달됩니다. 명명 된 매개 변수는 키 요소로 전달됩니다. 그래서 같은 URL을 만들려는 경우이

/글/색인/검색 : 모든/페이지 : 그래서

Router::connect('/url_to_catch', array('controller' => 'posts', 'action' => 'index', 'find' => 'all', 'page' => 2); 

:이 같은 URL을 작성합니다 2

을 끝내기 위해 실제로 매개 변수를 다음과 같이 전달합니다.

Router::connect('/happiness/tips/best_tips', array('controller' => 'tips', 'action' => 'index', 'items' => array('happiness', 'best_tips')); 

재미가 필요할 것입니다. 귀하의 도움말 컨트롤러에 다음과 같이 표시됩니다 :

function tips(){ $this->passedArgs['items']; } 
1

그건 아주 쉽게, 그냥 Router configuration in the manual을 확인합니다. Router 클래스의 connect 메서드를 사용해야합니다. 여기에는 2 개의 매개 변수가 허용됩니다. 먼저 원하는 경로를 지정하고 (예 : food/tips) 두 번째는 실제 경로와 이어지는 배열입니다.

Router::connect('/food/tips', array('controller' => 'tips', 'action' => 'index', 'food'); 
Router::connect('/happiness/tips/best_tips', array('controller' => 'tips', 'action' => 'index', 'happiness', 'best_tips'); 

이 각각 TipsController->index('food')TipsController('happiness', 'best_tips)를 호출하는 것과 같습니다 : 그래서 당신의 예는이 같은 일을 할 것입니다.

그러나 경로가 약간 재미있어 보입니다. 경로에 대한 Cake 규칙은 /controller/action/param1/param2/etc이며 매개 변수 param1 등은 선택적이며 다른 조치가 제공되지 않은 경우 index 조치가 가정됩니다.

다른 접근 방법을 취하고 있습니다. 가능한 경우 Cake Conventional Routine으로 변경하는 것이 좋습니다. Cake가 이러한 경로를 원하는 방법에 자동으로 연결하기 때문에 나중에 많은 작업을 절약 할 수 있습니다. .

제안 된 경로 대신 tips/foodtips/happiness/best_tips을 제안합니다. 이렇게하면 라우터 구성을 할 필요가 없습니다. 당신이 편집이야 후

UPDATE

, 나는 그것이 defining custom routes 뭔가를 시도하는 것이 가장 좋습니다 생각합니다. 나는 순간에 당신을 위해 이것을 테스트 할 수 없습니다, 그래서 당신은 몇 가지 자신을 테스트해야하지만,이 경우는 같은 것이다 :

죄송합니다

Router::connect('/:section/tips/:param', 
    array('action' => 'index'), 
    array(
     'section' => '[a-z]*', 
     'param' => '[a-z]*' 
    ) 
); 

UPDATE2를, 내가 테스트 한 위와 그것이 작동하지 않는 것 같습니다.

+0

아! 나는 느린 입력;) –

+0

고마워요 @vindia, 내 문제 (내 잘못을, 나는 원래의 질문을 편집합니다) 해결되지 않습니다. 관습에 관해서는, 내 문제는 팁 컨트롤러가 있지만 팁 섹션이 있습니다. 그래서 팁 컨트롤러에 각'섹션/팁 '을 라우트해야합니다 ... – yossi

+0

덕분에, 나는 여러 가지 튜토리얼과 가이드를 시도했습니다. 결과. 액션 값에 따라 컨트롤러를 라우트 할 수 없습니다. 이유가 없습니다. 이유가 없습니다. – yossi

1

내가 할 수있는 것보다 더 잘 설명 할 것이므로 여기에 붙여 넣는 것이 생산성이 좋은 것처럼 보이기 때문에이 책을 라우팅하는 장을 읽는 것이 좋습니다. 내가하려고합니다 설명을 위해서

http://book.cakephp.org/#!/view/948/Defining-Routes

,

Router::connect('/food/tips', array('controller' => 'tips', 'action' => 'index', 'food')); 
Router::connect('/happiness/tips/best_tips', array('controller' => 'tips', 'action' => 'index', 'happiness','best_tips')); 

이 일이 당신을 위해 작업을 진행해야한다. 당신이 본질적으로하고있는 것은 Cake Routing이 그것을 포착하기를 원하는 URL로 말하고 있습니다. Regex를 사용하여 이것을 할 것입니다. 그런 다음 원하는 코드를 실행하고 싶습니다. 그래서 컨트롤러와 액션 쌍을 할 일의 집합으로 사용합니다.

나중에 이름이 지정된 paremeters를 통과하려고합니다. 이것들은 컨트롤러의 기능을 압도 할 것이므로 당신은 그것들을 가지고 할 수 있습니다.

+0

감사합니다. @DavidYell, @vindia에 쓴대로 질문을 편집합니다. – yossi

+0

그래, 나는 당신이 성취하려고하는 것이 나쁘다고 생각한다. 케이크의 관점에서 볼 때 매우 나쁩니다. 당신은 어려울 것입니다. 이것을위한'Search' 스택을 제안합니다. –

+0

@DavidYell -'search' 스택? 의미? – yossi

관련 문제