2010-12-05 8 views
0

CakePHP 애플리케이션에 URL이 http://www.example.com/category/1 인 것 같습니다. 여기서 category는 웹 사이트 컨트롤러의 작업 이름입니다. CakePHP Routes 파일을 사용하여 컨트롤러 이름을 제거했습니다. 그리고 1은 Food 카테고리의 ID입니다.이 카테고리의 레코드는 데이터베이스에서 가져와야합니다.CakePHP 경로에서 데이터베이스의 데이터를 가져 오는 중

그러나 내 고객은 더 나은 SEO를 위해 숫자 ID없이 example.com/category/Food로 URL을 가져야합니다.

제 질문은 CakePHP Routes가 데이터베이스에서 카테고리 ID의 이름을 가져 와서 URL에 표시 할 수 있습니까? 그렇다면, 친절하게도 이것을 달성하기 위해 인도하십시오, 나는 이것에 심하게 붙어 있습니다.

도움이 될 것입니다.

답변

0

당신은 당신의 경로에 이런 식으로 뭔가를 할 수 : 당신의 categories_controller ::보기 ($ catName)에서 다음

Routes::connect('/category/*', array('controller' => 'categories', 'action' => 'view')); 

을, 당신은이 사실 보유하고 있는지 여부를 확인 :

if($this->Category->hasAny(array('name' => $catName))) { 
    // your code here 
} else { 
    // set message in the view saying category not found 
} 

많은있다 이 문제를 해결하는 방법은 내가 손에서부터 기억하는 것입니다.

2

먼저 카테고리 테이블에 category_url_title이라는 필드를 만듭니다. 그런 다음이 당신을 도울 것입니다 희망

function view($category_url_title=null) { 

    $category = $this->Category->find('first', array('conditions'=> array('Category.category_url_title'=>$category_url_title))); 
    $this->set(compact('category')); 
} 

다음과 같은 설정 뭔가 될 것 카테고리 컨트롤러에 다음 라우팅

//Route dynamic pages 
Router::connect(
    '/categories/:category_url_title', 
    array('controller'=>'categories', 'action'=>'view'), 
    array(
     'category_url_title' => '(?!add|view|delete\b)\b[a-zA-Z0-9_-]+', 
     'pass'=>array('category_url_title') 
    ) 
); 

그리고보기 방법을 추가 할 수 있습니다.

관련 문제