【问题标题】:Symfony 2 URL Parameters?Symfony 2 URL参数?
【发布时间】:2013-10-21 12:32:36
【问题描述】:

我习惯了 Yii 的 URL 管理:

site.com/controller/action/var1/value1/var2/value2

这样我可以在 URL 中以任意顺序放置变量或省略一个并指定默认值:

public function actionFoo( $var1=22, $var2 ) { //Var1 is optional, Var2 must come.
}

Symfony 中有这样的东西吗?我已经搜索过,但只找到了硬编码的 URL 位置,比如 CodeIgniter,这让我觉得很烦人,因为如果我在 URL 中间有一个参数,我需要给它一个值。

例子:

site.com/controller/action/false/false/value3

也许我习惯的也是一种不好的做法,我愿意以其他方式学习。

谢谢

【问题讨论】:

    标签: php symfony yii url-rewriting url-routing


    【解决方案1】:

    Symfony 不能那样工作。

    如果您需要将值映射到变量名,则需要使用查询字符串:?var1=value1&var2=value2

    然后,在您的控制器中,您可以执行$this->get('request')->query->get('var1', false)(如果未设置var1,则false 是默认值)。

    否则您可以定义a default value in your route,但它不会按照您期望的方式工作。

    你可以扩展路由组件来模仿 Yii 的路由系统,但我不建议这样做,因为这需要一些时间。

    万能的查询字符串完全符合您的预期。

    【讨论】:

      【解决方案2】:

      我也发现它也有点烦人,但是通过一些工作,您可以通过将多个路由设置到同一个控制器方法来使 URL 在 Symfony 中工作。关键是顺序很重要。

      此示例使用注释,但您可以使用 YAML、XML 和 PHP 做同样的事情。

      /**
       * @Route("/whatever/{var2}/{var1}", name="whatever_allvars")
       * @Route("/whatever/{var2}", name="whatever_onevar")
       * @Template()
       */
      public function actionFoo( $var1=22, $var2 ) { 
         //Var1 is optional, Var2 must come.
      }
      

      这将允许以下 URL:

      site.com/whatever/var2/var1
      site.com/whatever/var2
      

      如果你真的想让它与示例 URL 匹配,你可以这样设置。

      /**
       * @Route("/controller/action/var1/{var1}/var2/{var2}", name="whatever_allvars")
       * @Route("/controller/action/var1/{var1}", name="whatever_onevar")
       * @Template()
       */
      public function actionFoo( $var1, $var2=22 ) { 
         //Var2 is optional, Var1 must come.
      }
      

      这将允许以下 URL:

      site.com/controller/action/var1/value1/var2/value2
      site.com/controller/action/var1/value1
      

      希望这能让您了解在 Symfony 中可以做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多