2015-10-03 2 views
0

У меня есть этот маршрут, и это нормально:Slug маршрута в CakePHP 3

Router::connect('/tour/:slug', 
    ['controller' => 'Tours','action' => 'view'], 
    ['slug'=>'[^\/]+','pass'=>['slug']] 
); 

Я хочу, чтобы удалить "/ тур", но у него есть отсутствующая ошибка контроллера:

Router::connect('/:slug', 
    ['controller' => 'Tours','action' => 'view'], 
    ['slug'=>'[^\/]+','pass'=>['slug']] 
); 

страница ошибки (в запросе : http://localhost/nextholiday/a_slug): enter image description here

Что мне делать?

+0

Привет, Какая ошибка у вас? –

+0

Router :: connect ('/ xxx /: slug', ['controller' => 'Tours', 'action' => 'view'], ['slug' => '[^ \ /] +' , 'pass' => ['slug']] ) Попробуйте этот URl ot's run? –

+3

Важное значение имеет порядок, определяющий маршруты, а также точное сообщение об ошибке - и ни один из них не задан. – AD7six

ответ

1

Я использую тот же маршрут. Но это работает только тогда, когда маршрут раньше:

$routes->fallbacks(DashedRoute::class); 

Пример (внутри маршрутизатора :: сферы ('/' ...):

$routes->connect(
     '/:slug', 
     ['controller' => 'Articles', 'action' => 'view'], 
     [ 
      'pass' => ['slug'], 
      'slug' => '[^\/]+' // Taken from your example 
     ] 
    ); 
    // ... 
    $routes->fallbacks(DashedRoute::class); 

Если вы делаете все правильно, на DebugKit Маршруты вы увидите маршруты (шаблон URI) /: контроллер и /: контроллер /: действие/* чуть ниже вашего /: slug. Все остальные маршруты должны быть выше /: slug.

Как уже упоминалось, порядок имеет значение. Пропущенный контроллер иногда отображается, если ваш шаблон Regex неправильный, на шаблоне пули Я использую «[a-z0-9] + (?: - [a-z0-9] +) *".

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