Вы хотите быть осторожным, сопоставляя что-то первому пути после доменного имени. Это означает, что вы нарушаете парадигму «контроллер / действие / парам / парам». Вы можете сделать это, но это может означать, что вам нужно определить каждый URL для вашего сайта в файле маршрутов, а не использовать магию маршрутизации Cake.
Альтернативой может быть использование / v / для мероприятий и / e / для событий, чтобы сделать ваш URL коротким, но разбить его для нормальной парадигмы.
Если вы все еще хотите сделать то, что вы просили здесь, вы можете сделать что-то вроде следующего. Он ограничивает слаг буквами, цифрами, тире и подчеркиванием.
Router::connect(
'/:slug',
array(
'controller' => 'venues',
'action' => 'view'
),
array(
'slug' => '[a-zA-Z0-9_-]+'
)
);
Router::connect(
'/:slug/:events',
array(
'controller' => 'events',
'action' => 'index'
),
array(
'slug' => '[a-zA-Z0-9_-]+'
)
);
В вашем контроллере вы получите доступ к слагу со следующим (используя первый маршрут в качестве примера).
function view(){
if(isset($this->params['slug'])){
//Do something with your code here.
}
}