0

我发现有关 Symfony 路由系统的文档很难理解,我需要一些帮助。

我想将我的外部 URL 格式化为如下所示...

我的网站/模块/伊利诺伊州/芝加哥/

通过表格,用户可以按城市、州或城市和州进行搜索。

我认为路由规则类似于: url: module/:state/:city

但是如果只搜索城市或只搜索州呢?Symfony 错误说有一个错误,因为缺少路由参数。

处理这个问题的正确方法是什么?

4

1 回答 1

1

当您在路由中定义参数时,Symfony 要求指定该参数。因此,在您的情况下, :state 和 :city 都必须在 url 中指定。

如果您想让这些参数中的一个或两个成为可选参数,您可以尝试使用 *(未命名通配符)路由语法。看起来像这样:

some_route_name:
  url:    /module/*
  param:
    module: module
    action: search

此路由将匹配如下所示的 url:

  • /模块/城市/芝加哥
  • /模块/状态/伊利诺伊州
  • /模块/州/伊利诺伊州/城市/芝加哥
  • /模块/城市/芝加哥/州/伊利诺伊州

我知道这并不理想,因为 'city' 和 'state' 在 url 中。但这是使用 Symfony 的路由系统做你想做的最简单的方法。

然后,在您的控制器中,如果用户未指定城市或州,您将转发到 404:

$this->forward404Unless($this->getRequestParameter('city') || $this->getRequestParameter('state'));

如果这还不够好,您还有其他一些选择。如果您使用的是 1.1 或 1.2,则可以对路由对象进行子类化以使其执行您想要的操作。或者您可以使用多个路线来做您想做的事情(一个是 /module/:city_or_state,另一个是 /module/:state/:city)。

于 2009-02-09T00:30:13.997 回答