CakePHP: различная маршрутизация на основе расширений - PullRequest
1 голос
/ 13 февраля 2012

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

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 все еще вызывается (включая ext, поэтому /../pages/json/run.ctp).

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 13 февраля 2012

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

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

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

также проверьте, как торт управляет расширениями файлов на маршрутах

Надеюсь, это поможет

...