【问题标题】:How do I route a URL using a query string in Symfony2?如何在 Symfony2 中使用查询字符串路由 URL?
【发布时间】:2011-09-08 05:49:10
【问题描述】:

我正在使用 Symfony2 重写一个旧项目,以便试用该框架。我有以下形式的网址:

/profile/{id}

以 Symfony2 的时髦方式做到这一点。但是,最初通过执行以下操作找到了相同的页面:

/profile.php?id=12345

所以,如果有人有旧网址,我想重定向这些链接。问题是,我不知道如何捕捉这种性质的路线。我试过了

/profile.php?id={id}

但这似乎不起作用。如何设置这条路线?

跟进:我不想做“包罗万象”(因为它对我来说不直观,所以我担心未来的错误),我不想通过htaccess 出于同样的原因。我认为最好的选择是匹配“/profile.php”然后在控制器中,检查“id”是否存在于查询字符串中并相应地重定向。如果没有,我将重定向到 404。

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    我在这里看到两个选项:

    1. 您使用 mod_rewrite 将旧架构 (/profile.php?id=54321) 映射到新架构 (/profile/54321)(如果您使用 Apache)。

    2. 你在 Symfony 中编写了一个映射器。这意味着在您的路线列表的末尾指定一个模式,该模式将捕获所有尚未捕获的内容:


    whatever:
      pattern: /{whatever}
      defaults: { _controller: CoreBundle:Default:whatever }
      requirements:
        whatever: .+
    

    对于 (2),您必须检查 Request-object 为您提供的查询(如 getQueryString()),b/c 我不确定是否有可能在 a 中匹配 ?xyz路线。

    【讨论】:

    • 正确的 mod_rewrite 应该是:RewriteRule ^profile.php?id=(\d+)$ /profile/$1 [R=301] 吗?
    • 我只是想验证这是最好的策略,因为我不是 Apache htaccess 恶作剧方面的专家
    • 我也没有。你可以在这里测试重写:martinmelin.se/rewrite-rule-tester。虽然我更愿意用 SF 来处理这个问题。因为路线现在是模型/逻辑的一部分。
    • @raffael1984 post params 与路由无关。他应该检查他的控制器中的参数,例如$request->query->getInt('id')。这总是返回一个整数。
    • 我和马丁都没有谈论 POST 参数
    猜你喜欢
    • 2014-08-23
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多