2012-10-29 4 views
1

CakePHP (routes.php 파일)에서 경로를 만들어 허영 URL에 userID를 매핑하는 쉬운 방법과 모범 사례가 있는지 궁금합니다.CakePHP에서 허영심 URL로 라우팅하기

내 경로 페이지에서 다음 테스트 코드를 (이 작업을 수행하는 끔찍한 방법)이 있습니다

$users = array 
(
    1 => 'firstname-lastname', 
    2 => 'firstname2-lastname2' 
); 

//profiles 
foreach($users as $k => $v) 
{ 
    // LESSONS (Profiles) 
    Router::connect('/:user', array('controller' => 'teachers', 'action' => 'contentProfile', $k), 
     array('user' => '(?i:'.$v.')')); 
} 

에서 작업 등 conProfile 내 교사 컨트롤러 위의 코드 경로 :

mydomain.com/teachers/contentProfile/1 
to 
mydomain.com/firstname-lastname 

에게 라우팅 페이지에서 데이터베이스에 연결할 수 있습니까? 성능 측면에서 좋은 생각이 아닌가? 이 작업을 수행하는 가장 좋은 방법이 무엇인지 알려주십시오.

답변

4

데이터베이스에서 전달 된 URL을 검색하여 올바른 사용자 ID로 변환하는 사용자 지정 경로 클래스를 만들 수 있습니다. 캐시 시간을 길게 설정하면 DB에 치명적인 성능 영향을 줄일 수 있습니다.

The book documentation하지만, 조금 얇은이지만, 기본 구조는 이것이다 : 당신의 경로에

class TeachersRoute extends CakeRoute { 

    /** 
    * Modify incoming parameters so that controller receives the correct data 
    */ 
    function parse($url) { 
    $params = parent::parse($url); 

    // Add/modify parameter information 

    // The teacher id should be sent as the first value in the $params['pass'] array 

    return $params; 
    // Or return false if lookup failed 
    } 

    /** 
    * Modify parameters so calls like HtmlHelper::url() output the correct value 
    */ 
    function match($url) { 
    // modify parameters 

    // add $url['slug'] if only id provided 

    return parent::match($url); 
    } 

: 그리고

Router::connect(
    '/:slug', 
    array(
    'controller' => 'teachers', 
    'action' => 'contentProfile' 
), 
    array(
    'slug' => '[a-zA-Z0-9_-]+' 
    'routeClass' => 'TeachersRoute', 
) 
); 
+0

덕분에이 내가 원하는 것입니다. 그래,이 책은 조금 너무 얇다. – cdub

+2

Mark Story에는 사용자 지정 라우트 클래스에 대한 이전 기사가 있습니다. http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp – gapple

+0

예. 대답도. 다시 Thx. – cdub

관련 문제