2014-01-19 2 views
1

Я после блога учебник CakePHP, и в данный момент URLПредотвратить CakePHP контроллер доступа с маршрутизацией

/posts/view/1 

работ. Использование маршрутизации, мне удалось создать новость псевдоним:

Router::connect('/news/:action/*', array('controller' => 'posts')); 
Router::connect('/news/*', array('controller' => 'posts')); 

Таким образом, URL

/news/view/1 

работает как хорошо. Тем не менее,/posts/URL-адрес все еще работает. Как предотвратить URL-адрес с/posts/still working?

ответ

0

Ответ на ваш вопрос не является немного сложнее, ничего не было там в CakePHP документации

То, что я сделал в подобной ситуации была приведена ниже:

Шаг 1: Я определить один правило маршрутизации в routes.php в

Router::connect('/posts/*', 
          array('controller' => 'posts', 
            'action' => 'handleRedirection') 
       ); 

Шаг 2: Я создал одну функцию handleRedirection контроллер сообщений

function handleRedirection(){ 
    $url = str_replace('posts','news',$this->request->url) 
    $this->redirect($url,'301'); 
} 

См. В приведенном выше примере. Я использую 301 постоянное перенаправление, поэтому вы можете сделать что-то подобное.

+0

Спасибо, это работает хорошо. Давайте просто надеемся, что команда CakePHP добавит эту функцию позднее. – ohyeah

+0

Это неправда, он изобрел колесо, это уже основная функция, см. Http://api.cakephp.org/2.4/class-Router.html#_redirect – burzum

0
  1. Вы можете перенаправить/сообщения на домашнюю страницу, например:

    Router::connect('/posts', array('controller' => 'pages', 'action' => 'display', 'home'));

  2. Вы можете просто переименовать PostsController и назовите его NewsController, если вы хотите использовать этот термин.

1

Ответ Anubhavs технически корректен, но предположение, что это еще не реализовано в рамках, неверно. На самом деле перенаправлять-маршруты являются частью ядра:

См http://api.cakephp.org/2.4/class-Router.html#_redirect

Подключение нового перенаправления маршрута в маршрутизаторе.

Маршруты перенаправления отличаются от обычных маршрутов, поскольку они выполняют перенаправление фактического заголовка , если совпадение найдено. Перенаправление может происходит в вашем приложении или перенаправляется во внешнее местоположение.

Примеры:

Router::redirect('/home/*', array('controller' => 'posts', 'action' => 'view'), array('persist' => true)); 

Перенаправление/дома/* к/сообщений/вид и передает параметры /сообщений/зрения. Использование массива в качестве адресата перенаправления позволяет использовать другие маршруты, чтобы определить, куда должна быть перенаправлена ​​строка URL.

Router::redirect('/posts/*', 'http://google.com', array('status' => 302)); 

Перенаправление/сообщений/* для http://google.com со статусом HTTP 302

+0

просто хочу знать, можем ли мы передавать параметры с помощью одна и та же? – Anubhav