我发现有关 Symfony 路由系统的文档很难理解,我需要一些帮助。
我想将我的外部 URL 格式化为如下所示...
我的网站/模块/伊利诺伊州/芝加哥/
通过表格,用户可以按城市、州或城市和州进行搜索。
我认为路由规则类似于: url: module/:state/:city
但是如果只搜索城市或只搜索州呢?Symfony 错误说有一个错误,因为缺少路由参数。
处理这个问题的正确方法是什么?
我发现有关 Symfony 路由系统的文档很难理解,我需要一些帮助。
我想将我的外部 URL 格式化为如下所示...
我的网站/模块/伊利诺伊州/芝加哥/
通过表格,用户可以按城市、州或城市和州进行搜索。
我认为路由规则类似于: url: module/:state/:city
但是如果只搜索城市或只搜索州呢?Symfony 错误说有一个错误,因为缺少路由参数。
处理这个问题的正确方法是什么?
当您在路由中定义参数时,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)。