我发现有关Symfony路由系统的文档很难理解,我需要一些帮助。
我想将外部网址格式化为以下内容......
MYSITE /模块/伊利诺伊州/芝加哥/
通过表单,用户可以按城市,州或城市和州进行搜索。
我认为路由规则是这样的: url:module /:state /:city
但是如果只搜索城市或只搜索州? Symfony错误说错误,因为缺少路由参数。
处理此问题的正确方法是什么?
答案 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)。