如果有两个以上的查询要省略,如何编写routing.yml

时间:2014-02-13 08:00:50

标签: symfony

我有这样的路线。

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

普通网址就像这样

/ API / byDate / 2013年4月12日/ 0/40

但有时我想省略日期。

但是,这显示错误

/ API / byDate // 0/40

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以更改路线参数:

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+