Маршрутизация на другие URL в зависимости от типа записи - PullRequest
2 голосов
/ 19 марта 2010

Как лучше всего настроить мои маршруты, чтобы разные типы сообщений имели разные URL-адреса?

Например, обычные сообщения /posts/slug, а избранные сообщения /featured/slug

Обе ссылки на тот же контроллер и действие /posts/view/slug.

Я экспериментировал с разными способами сделать это, но с небольшим успехом. В настоящее время мои параметры ссылок выглядят примерно так:

array('controller' => 'posts', 'action' => 'view', 'featured' ,$post['Post']['slug'])

Редактировать: я мог бы создать действие для каждого отдельного типа и использовать setAction, чтобы использовать вместо этого действие представления. Хотя есть ли лучший способ сделать это?

array('controller' => 'posts', 'action' => 'featured', $post['Post']['slug'])

function featured($slug) {
    $this->setAction('view', $slug);
}

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Я думаю, вы также можете сделать это, добавив следующую строку в ваш /app/config/routes.php:

Router::connect('/:controller/featured/*',array('action' => 'view'));

См. настройка маршрута в кулинарной книге

0 голосов
/ 19 марта 2010

Это может сработать:

// app/config/routes.php
Router::connect('/featured/:slug', array(
  'controller' => 'posts',
  'action' => 'view',
  'type' => 'featured'
));
Router::connect('/posts/:slug', array(
  'controller' => 'posts',
  'action' => 'view',
  'type' => 'normal'
));

// one of your views
echo $html->link('Featured post title', array(
  'controller' => 'posts',
  'action' => 'view',
  'type' => 'featured',
  'slug' => $post['Post']['slug']
));
or
echo $html->link('Normal post title', array(
  'controller' => 'posts',
  'action' => 'view',
  'type' => 'normal',
  'slug' => $post['Post']['slug']
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...