Symfony1 如何在Symfony中格式化外部URL?

Symfony1 如何在Symfony中格式化外部URL?,symfony1,url-routing,Symfony1,Url Routing,我发现关于Symfony路由系统的文档很难理解,我需要一些帮助 我想格式化我的外部URL,如下所示 mySite/模块/伊利诺伊州/芝加哥/ 通过表单,用户可以按城市、州或城市和州进行搜索 我认为路由规则应该是这样的: url:module/:state/:city 但如果只搜索城市或州会怎么样?Symfony erros说有一个错误,因为缺少一个路由参数 处理此问题的正确方法是什么?在路由中定义参数时,Symfony要求指定该参数。因此,在您的例子中,:state和:city都必须在url中指

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

我想格式化我的外部URL,如下所示

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

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

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

但如果只搜索城市或州会怎么样?Symfony erros说有一个错误,因为缺少一个路由参数


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

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

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

some_route_name:
  url:    /module/*
  param:
    module: module
    action: search
此路由将匹配如下所示的URL:

some_route_name:
  url:    /module/*
  param:
    module: module
    action: search
  • /模块/城市/芝加哥
  • /模块/州/伊利诺伊州
  • /模块/州/伊利诺伊州/城市/芝加哥
  • /模块/城市/芝加哥/州/伊利诺伊州
我知道这并不理想,因为url中有“城市”和“州”。但这是使用Symfony的路由系统做你想做的事情的最简单方法

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

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

如果这还不够好,你还有一些其他的选择。如果您使用的是1.1或1.2,那么您可以对路由对象进行子类化,使其执行您想要的操作。或者,您可以使用多个路由来执行所需操作(一个是/module/:city\u或_state,另一个是/module/:state/:city)。

感谢您的响应,我所做的是使用多个路由,并让a路由操作根据条件确定要显示的路由。