【问题标题】:CakePHP: different routing based on extensionsCakePHP:基于扩展的不同路由
【发布时间】:2012-03-04 17:39:33
【问题描述】:

我正在尝试根据 Cake2 中的 url-extension 路由到不同的操作。我有这条工作路线:

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)。

感谢您的帮助!

【问题讨论】:

    标签: cakephp routing cakephp-2.0


    【解决方案1】:

    嗯,这可能是因为第一条路线上的正则表达式

    在第一条规则上你告诉 cake :filename 可以包含一个点 [a-zA-Z0-9_!\-\.]+ 所以路由器总是匹配第一条规则..

    尝试更改路线的顺序,从特定到一般

    还检查 cake 如何管理 file extensions on routes

    希望对你有帮助

    【讨论】:

    • 感谢您的回复。不幸的是,这没有帮助。我更改了路线的顺序并取出了点.. 蛋糕仍然发送到run 操作
    猜你喜欢
    • 2023-02-18
    • 2012-03-09
    • 1970-01-01
    • 2021-03-17
    • 2016-02-14
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多