如何格式化Symfony中的外部URL?

时间:2009-02-06 00:12:00

标签: symfony1 url-routing

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

我想将外部网址格式化为以下内容......

MYSITE /模块/伊利诺伊州/芝加哥/

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

我认为路由规则是这样的: url:module /:state /:city

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

此路线将匹配如下所示的网址:

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

我知道这并不理想,因为“城市”和“州”都在网址中。但这是使用Symfony路由系统做到你想要的最简单方法。

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

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

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