【问题标题】:Symfony routing yml file with optional parameters带有可选参数的 Symfony 路由 yml 文件
【发布时间】:2016-11-24 09:55:51
【问题描述】:

我正在尝试在 symfony 中路由一个 URL,要匹配的 URL 有 3 个变体

/test/param1/test.json
/test/param1/param2/test.json
/test/param1/param2/param3/test.json

我想用一个控制器来做这件事,param2 和 param3 是可选参数。

我在 requirements param2 和 param3 中尝试了正则表达式来允许一个字符串,但我无法让所有 3 条路径都匹配到同一个控制器。

【问题讨论】:

  • 我看到的更简单的方法是声明 3 个指向同一个动作的路由

标签: php symfony parameters routing yaml


【解决方案1】:

您可以只使用一个允许“/”的路由参数,然后在控制器中拆分参数。像这样:

_test:
    path:     /test/{params}/test.json
    defaults: { _controller: AppBundle:Demo:test }
    requirements:
        params: .+

还有控制器:

public function testAction(Request $request, $params)
{
    dump($params); // param1/param2/param3
    $paramsArray = split("/", $params);
}

这适用于任意数量的参数!

【讨论】:

    【解决方案2】:

    你可以做的是定义不同的路由并将它们分配给一个Controller-Action:

    testparam123:
       pattern:   /test/{param1}/{param2}/{param3}/test.json
       defaults:  { _controller: Bundle:Controller:test}
    testparam12:
           pattern:   /test/{param1}/{param2}/test.json
           defaults:  { _controller: Bundle:Controller:test}
    testparam1:
           pattern:   /test/{param1}/test.json
           defaults:  { _controller: Bundle:Controller:test}
    

    然后你的控制器动作方法看起来像

    public function testAction($param1,$param2=NULL,$param3=NULL) {
       // do something
    }
    

    希望有帮助

    【讨论】:

      【解决方案3】:

      这不适用于一个路由配置。如果参数应该是可选的,那么您必须像

      一样将查询参数留空
      /test/param1/param2//test.json
      

      这里 symfony 知道 param3 是空的。否则你永远不知道 url 的哪一部分是空的,因为你可以这样做:

      /test/param1/param3/test.json

      symfony 应该如何识别 param2 丢失而 param3 被给出? 您可以从

      更改逻辑
      /test/param1/param2/param3/test.json
      

      /test/param1-param2-param3-test.json
      

      这更容易处理。

      【讨论】:

      • 我认为 CiTNOH 的解决方案与此不符:
      • /test/param1/param3/test.json
      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 2023-03-03
      • 2012-10-22
      • 2016-10-12
      相关资源
      最近更新 更多