【问题标题】:CakePHP routing with GET params带有 GET 参数的 CakePHP 路由
【发布时间】:2012-09-20 18:45:39
【问题描述】:

我目前正在将一个网站从 WordPress 移植到 CakePHP,但我在 WP 版本中使用的其中一个路由有问题。

我必须将http://example.com/?specific_key=value 路由到http://example.com/controller/action,但在默认主页路由捕获之前,我找不到使用参数捕获 URL 的方法。

非常感谢任何建议或指示。

谢谢!

【问题讨论】:

    标签: cakephp get routes


    【解决方案1】:

    尝试将以下内容添加到您的路线文件的顶部。检查参数是否设置了该值并将“/”连接到您需要路由到的位置。这样,它将在页面控制器路由之前匹配您的路由。

    if (isset($_GET['specific_key']) && $_GET['specific_key'] === 'value') {
        Router::connect('/', array(whatever controller/action you need));
    }
    
    // the rest of your routes
    

    你也可以在你的 htaccess 文件中为它创建一个重写规则:

    RewriteCond %{QUERY_STRING} ^specific_key=value$ [NC]
    RewriteRule / /controller/action? [R=301,L]
    

    第三个选项:使用自定义路由类:https://gist.github.com/3763800

    创建文件APP/Lib/Route/QueryStringRoute.php,并将上面链接的内容放入其中。

    然后在你的路线中做:

    App::uses('QueryStringRoute', 'Route');
    Router::connect('/', array('controller' => 'your_controller'), array(
        'routeClass' => 'QueryStringRoute', 
        'query' => array('specific_key' => 'value')
    ));
    

    同样,它需要在您的回家路线之前。

    编辑:添加第三个选项。

    【讨论】:

    • 条件完美地完成了这项工作,非常感谢!我希望我有足够的声誉来投票给你,如果有人看到这个,请给@tigrang 一些投票!再次感谢! :D
    【解决方案2】:

    无法根据 GET 参数设置路由。

    编辑:至少使用内置的 CakeRoute 类。

    【讨论】:

    • 我明白了...所以我的解决方法是从 App 控制器调用操作方法(因为我将 '/' 路由到 /app/index),但我无法仅通过调用来访问控制器它,我如何访问它?这是一个好的选择吗?
    • AppController 本质上是一个抽象类。您不能直接引用它。试试下面@tigrang 的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2011-01-09
    • 2018-04-22
    • 2013-10-13
    • 2015-09-30
    • 2015-11-20
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多