2012-10-10 4 views
1

나는 cakePHP에서 새롭다, 내 응용 프로그램에서 내 URL을 재작 성하고 싶습니다.Cakephp URL 라우팅

일부 내 컨트롤러의 경우 이동하려고합니다. 등이 내가 쓰기 규칙에 대한

`controller/action/id/slug`. 

,

Router::connect(
     '/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id'), 'id' => '[0-9]+') 
); 

나는대로 링크를 쓰고 있어요 ..

echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index', 'slug' => $record['Category']['slug']), array('escape' => false)); 

질문

  1. 규칙이 언급 만 응용 프로그램입니다 컨트롤러 및 동작 ie 제품 및 vi ew resp. ?

  2. 왜 내 URL (호버 위에 표시)이 controller/action/slug_name 대신 controller/action/slug:slug_name으로 표시됩니까? 동일한 컨트롤러에서

  3. 나는 다른 URL과 같은 action/id/slug_name을 재 작성을 사용하려면 또는 어딘가에 내가 /action를 보내거나 어딘가에 난 단지 슬러그 action/slug_name 사용합니다. 단일 규칙 만이 모든 사람을 위해 작성 되었습니까? 또는 각 컨트롤러와 동작에 대해 별도의 규칙을 정의해야합니다.

  4. 모든 컨트롤러에 공통 규칙을 만드시겠습니까?

자세한 내용을 기입하십시오. 나는 설명서를 읽으려고했지만 약간 혼란 스럽다. 내 매개 변수가 내가 언급 한 모든 종류의 유형에 대한 요청을 얻는 방법.

쓰기는 지금은 등

controller/action/param1:param_val1/param2:param_val2, 
echo $this->Html->link('Val', array('controller' => 'categories', 
'action' => 'index', 'param1' => param_val1, 'param2' => param_val2,), 
array('escape' => false)); 

하고 PARAMS를 얻기 위해 단순한 방법을 사용하고 있습니다. 그러나 나는 더 좋고 더 빠른 움직임과 함께 꽤 명확하고 아름다운 URL을 갖고 싶습니다. 지나가는 슬러그처럼 findBySlug를 직접 가져 오는 것이 좋을 것 같습니다.

답변

3

1) 예, 라우터 :: 연결 규칙을 만들 때 하나의 경우에만 사용할 수 있습니다. 즉, 하나의 URL 또는 그룹 os URL에 적용 할 수 있습니다. 당신은 당신은 해당 URL에 대한 규칙을 만들어야합니다

echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index', $record['Category']['slug']), array('escape' => false)); 

3)이 방법으로 그것을해야

2), URL의 구조는 예시에 따르면

다른 경우에만의

# only for action/slug_name case 
Router::connect('/products/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('slug'), 'slug'=>'[a-z_]+')); 
# for action/id/slug_name case 
Router::connect('/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id','slug'), 'id' => '[0-9]+','slug'=>'[a-z_]+')); 

4를 다음과 같이 규칙은 내가 CakePHP에서의 HTML 구성 요소를 사용하지 않고 URL을 작성하는 방법을 권장합니다)입니다.아니 나쁜이기 때문에,하지만 훨씬 빠르고 쉽게

대신이 일이 있기 때문에 :

controller/action/param1:param_val1/param2:param_val2, 
echo $this->Html->link('Val', array('controller' => 'categories','action' => 'index', 'param1' => param_val1, 'param2' => param_val2,),array('escape' => false)); 

훨씬 더

이 작업을 수행하려면 다음

controller/action/param_val1/param_val2 

echo 'controller/action/'.$param_val1.DS.$param_val2; 

또한 더 나은입니다 SEO 및 친숙한 URL