2010-12-05 3 views
0

У меня есть URL-адрес в приложении CakePHP, который выглядит как http://www.example.com/category/1. Где категория - это название действия в контроллере веб-сайтов. Я удалил имя контроллера, используя файл CakePHP Routes. И 1 - это идентификатор категории «Еда», записи которого должны быть получены из базы данных.Получение данных из базы данных в CakePHP Маршруты

Но мой клиент требует, чтобы у меня был URL-адрес example.com/category/Food, без числового идентификатора для лучшего SEO.

Вопрос: может ли CakePHP Routes отображать имя идентификатора категории из базы данных и показывать его в URL-адресе? Если да, то любезно посоветуйте мне, чтобы достичь этого, поскольку я сильно застрял на этом.

Любая помощь будет принята с благодарностью.

ответ

0

Вы могли бы что-то подобное в ваших маршрутов:

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

Затем в categories_controller :: зрения ($ catName), нужно проверить, выполняется ли это верно:

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

Есть много способы справиться с этим, это только тот, который я помню с рук.

2

Сначала создайте поле с именем category_url_title в категориях таблиц. Затем добавьте следующий маршрутный

//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') 
    ) 
); 

И вид метод в Категории контроллере будет что-то как ниже

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')); 
} 

Надеется, что это поможет.

Смежные вопросы