【问题标题】:How to write routing.yml when you have more than two query to omit当您有两个以上的查询要省略时如何编写 routing.yml
【发布时间】:2014-02-13 08:00:49
【问题描述】:

我有这样的路由。

acme_apiByDate_homepage:
    pattern: /api/byDate/{date}/{page}/{limit}
    defaults: { _controller: AcmeTopBundle:Api:byDate,date:"",page:0,limit:50, _format: xml  } 

普通网址是这样的

/api/byDate/2013-04-12/0/40

但有时我想省略日期。

但是,这显示错误

/api/byDate//0/40

我知道我可以省略最后一个参数,但我想省略中间参数。

我该怎么做?

【问题讨论】:

  • 我认为常见的可选变量如 page 和 offset 属于查询字符串。特别是对于 api。 /api/byDate/date?page=3&limit=100。您的默认设置仍然有效。否则,您将在许多路线上遇到这个问题,而生活就是如此短暂。

标签: symfony


【解决方案1】:

您可以像这样更改路由参数:

acme_apiByDate_homepage:
    pattern: /api/byDate/{page}/{limit}/{date}
    defaults: { _controller: AcmeTopBundle:Api:byDate, page:0, limit:50, date: null, _format: xml }

并添加您的控制器:

byDateAction($page, $limit, $date = null)
{
}

如果路由和控制器的 null 不起作用,请尝试空字符串。

更新

您还可以为相同的操作定义更多路线,例如:

api_data_by_date:
    pattern: /api/byDate/{date}/{page}/{limit}
    defaults: { _controller: AcmeTopBundle:Api:getData, page:0, limit:50, date: null, _format: xml }

api_data_by_page:
    pattern: /api/byPage/{page}/{date}/{limit}
    defaults: { _controller: AcmeTopBundle:Api:getData, page:0, limit:50, date: null, _format: xml }

api_data_by_limit:
    pattern: /api/byLimit/{limit}/{page}/{date}
    defaults: { _controller: AcmeTopBundle:Api:getData, page:0, limit:50, date: null, _format: xml }

或者,您可以对参数添加一些要求,例如:

api_data_by_date:
    pattern: /api/getData/{date}/{limit}/{page}
    defaults: { _controller: AcmeTopBundle:Api:getData, page:0, limit:50, date: 2013-04-12, _format: xml }
requirements:
    date:  [0-9]{4}\-[0-9]{2}\-[0-9]{2}
    page:  \d+
    limit: \d+

或者试试:

api_data_by_date:
    pattern: /api-d-{date}-l-{limit}-p-{page}
    defaults: { _controller: AcmeTopBundle:Api:getData, page:0, limit:50, date: 2013-04-12, _format: xml }
requirements:
    date:  [0-9]{4}\-[0-9]{2}\-[0-9]{2}
    page:  \d+
    limit: \d+

【讨论】:

  • 谢谢。但是是否可以使页面为空而不是日期。我有一些变量,并希望根据情况将每个变量设为空。
  • 谢谢,我会使用第一个。您的解释非常棒,帮助很大。
  • 我遇到了和你一样的麻烦。请访问我的帖子:stackoverflow.com/questions/21766700/….
  • 我需要将日期正则表达式用引号括起来以避免循环依赖错误。日期:'[0-9]{4}\-[0-9]{2}\-[0-9]{2}'
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2020-03-24
  • 1970-01-01
  • 2023-01-11
  • 2021-12-28
相关资源
最近更新 更多