2016-02-02 2 views
0

Мне нужен маршрут, содержащий как параметр языка, так и slug в URL-адресе.CakePHP Маршрутизация с использованием slug и языка

http://localhost/demo/eng/home т.е.

Здесь «рус» это название языка и «дом» является тихоход имя.

Я сделал следующий код в route.php

Router::connect('/:language/:action/*',array('controller' => 'homes'),array('language' => '[a-z]{3}')); 

Router::connect('/:language/:slug/*', array('controller' => 'homes', 'action' => 'view'), array('language' => '[a-z]{3}','slug' => '[a-zA-Z0-9_-]+')); 
Router::connect('/:slug',array('controller' => 'homes','action' => 'view'),array('slug' => '[a-zA-Z0-9_-]+')); 

Также ввиду

+0

Правильно, так в чем проблема? –

+0

Исключенный url приходит нравится это http: // localhost/demo/eng/view/slug: пресс-релиз. Мне не нужно имя действия и ключевое слово slug. Я хочу, чтобы этот «http: // localhost/demo/eng/press-release» – Sudhir

ответ

1

Вы противоречили маршруты.

Я предполагаю, что вы пытаетесь передать массив URL, как следующее HtmlHelper::link() или HtmlHelper::url():

[ 
    'controller' => 'homes', 
    'action' => 'view', 
    'language' => 'eng', 
    'slug' => 'press-release', 
] 

Но этот массив соответствует не только /:language/:slug/*, но и /:language/:action/*. Потому что оба language и action содержатся, а slug соответствует * как именованный параметр. И /:language/:action/* появляется перед /:language/:slug/* на ваших маршрутах.php. Если вы определяете конфликтующие маршруты, первый определенный маршрут имеет более высокий приоритет. Таким образом, вы получаете URL-адрес /eng/view/slug:press-release.

В заключение, /:language/:action/* следует удалить или определить не позднее, чем после /:language:/:slug/*.

+0

Спасибо @kurita Можете ли вы мне помочь, в каком порядке я могу определить путь, если я использую префикс, slug, язык. У вас есть примеры – Sudhir

+0

I подумайте, что префиксные маршруты должны появляться перед маршрутами с префиксом. Потому что 'slug' может быть любой произвольной строкой (например,'/admin' соответствует '/: slug'). 'Router :: connect ('/: prefix /: язык /: slug/*', ...);' 'Router :: connect ('/: prefix /: slug', ...);' 'Router :: connect ('/: язык /: slug/*', ...);' 'Router :: connect ('/: slug', ...);' –

+0

Спасибо @kurita, если я использую slug и prefix без языка, то какой будет порядок, включая вышеперечисленные языки и префикс slugs. – Sudhir

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