2015-01-14 2 views
1

cakephp 2.x에서 커스텀 라우터 클래스를 만들었습니다. 나는 단지 this 블로그 게시물을 따르고 있습니다. 내 애플 리케이션에서/라우팅/경로 폴더가 없어 및 폴더를 만들고 그것에 StaticSlugRoute.php 파일을 넣어. 이 파일에서 다음 코드를 포함 cakephp 커스텀 라우트 클래스를 설정하는 방법

<?php 
App::uses('Event', 'Model'); 
App::uses('CakeRoute', 'Routing/Route'); 
App::uses('ClassRegistry', 'Utility'); 

class StaticSlugRoute extends CakeRoute { 

    public function parse($url) { 
     $params = parent::parse($url); 
     if (empty($params)) { 
      return false; 
     } 
     $this->Event = ClassRegistry::init('Event'); 
     $title = $params['title']; 
     $event = $this->Event->find('first', array(
        'conditions' => array(
         'Event.title' => $title, 
        ), 
        'fields' => array('Event.id'), 
        'recursive' => -1, 
        )); 
     if ($event) { 
      $params['pass'] = array($event['Event']['id']); 
      return $params; 
     } 
     return false; 
    } 
} 

?> 

는이 코드를 추가하지만 (이벤트/인덱스가 올바른 작동) .I이 'www.example.com/events/event 제목'경로하려는 노력을 보인다 않았다 url to 'www.example.com/events/index/id'. 누락 된 것이 있거나이 코드를 어디로 가져올 필요가 있습니까? 이 유형의 ('www.example.com/event 제목') URL을 리디렉션 할 수있는 경우

+0

이벤트/색인을 이벤트 ID 대신 이벤트 제목으로 사용하는 것이 좋습니다. 그런 다음 이벤트/색인에서 이벤트를 찾기 위해 로직을 수행하고 자신의 라우트 클래스를 작성하는 대신 config/routes.php에서 일반 구성을 사용할 수 있습니다. – Kai

+0

감사합니다. :)하지만 저는 이미 'config/routes.php'에서 'www.example.com/events/event title'을하고 있습니다. 이제 정적 페이지를 추가해야합니다 (우리에 관해서, 우리에게 연락하십시오 ... 그리고 미래에 더 많은 페이지가 있습니다 .-www.example.com/about 우리). 이제 'www.example.com/event title'로 라우팅해야합니다. URL은 정적 페이지 라우팅과 충돌합니다. 따라서 이벤트 페이지 또는 정적 페이지에 대한 사용자 지정 라우팅이 필요합니다. – indrarajw

답변

3

맞춤 경로 클래스는/Routing/Route가 아닌/Lib/Routing/Route 내에 있어야합니다.

그러면 routes.php 파일 내에서 사용자 정의 클래스를 가져와야합니다.

App::uses('StaticSlugRoute', 'Lib/Routing/Route'); 
Router::connect('/events/:slug', array('controller' => 'events', 'action' => 'index'), array('routeClass' => 'StaticSlugRoute')); 

이/이벤트/같이 URL에 대한 사용자 정의 라우팅 클래스를 사용하는 CakePHP를 알려줍니다 : 슬러그 (예 :/행사/이벤트 제목).

사이드 노트 : 행 수가 증가 할 때 심각한 성능 저하를 피하기 위해 적절한 데이터베이스 필드를 올바르게 인덱싱하는 것을 잊지 마십시오.

+0

고마워,이 완전히 작동했습니다 :) – indrarajw

+1

또한 사용할 수 있습니다 : : ('StaticSlugRoute', 'Lib/Routing/Route'); 2.x의 개선 – Adon