2012-02-13 3 views
1

Я пытаюсь перенаправить на другое действие, основанное на расширении url в Cake2. У меня есть этот рабочий маршрут:CakePHP: другая маршрутизация на основе расширений

Router::connect(
    '/:lang/:product/:version/:filename', 
    array(
     'controller' => 'pages', 
     'action'  => 'run', 
     'lang'   => ':lang', 
     'product'  => ':product', 
     'version'  => ':version', 
     'filename'  => ':filename' 
    ), 
    array(
     'pass'   => array('filename'), 
     'lang'   => '[a-zA-Z]{2}', 
     'product'  => '[a-zA-Z0-9_!\-]+', 
     'version'  => '[0-9]{3}', 
     'filename'  => '[a-zA-Z0-9_!\-\.]+' 
    ) 
); 

Для нового маршрута я просто добавил расширение и изменил действие.

Router::connect(
    '/:lang/:product/:version/:filename.json', 
    array(
     'controller' => 'pages', 
     'action'  => 'get', 
     'lang'   => ':lang', 
     'product'  => ':product', 
     'version'  => ':version', 
     'filename'  => ':filename' 
    ), 
    array(
     'pass'   => array('filename'), 
     'lang'   => '[a-zA-Z]{2}', 
     'product'  => '[a-zA-Z0-9_!\-]+', 
     'version'  => '[0-9]{3}', 
     'filename'  => '[a-zA-Z0-9_!\-\.]+' 
    ) 
); 

По какой-то причине, хотя run действие еще называется (включая внутр, так /../pages/json/run.ctp).

Благодарим за помощь!

ответ

1

хмм его, вероятно, из-за регулярного выражения на первом маршруте

по первому правилу вы рассказываете торт, который :filename может содержать точку [a-zA-Z0-9_!\-\.]+ Таким образом, маршрутизатор всегда будет соответствовать первому правилу ..

попробуйте изменить порядок следования маршрутов, от конкретного общей

также проверить, как торт управляет file extensions on routes

Надеются, что это помогает

+0

благодарит за ваш ответ. К сожалению, это не помогло. Я изменил порядок маршрутов и вытащил точку. Все еще Торт отправляет в действие 'run' – harpax

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