【问题标题】:How to format an external URL in Symfony?如何在 Symfony 中格式化外部 URL?
【发布时间】:2009-02-06 00:12:00
【问题描述】:

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

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

mySite/module/illinois/chicago/

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

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

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

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

【问题讨论】:

    标签: symfony1 url-routing


    【解决方案1】:

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

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

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

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

    • /模块/城市/芝加哥
    • /module/state/伊利诺伊州
    • /module/state/illinois/city/chicago
    • /module/city/chicago/state/illinois

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

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

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

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

    【讨论】:

    • 感谢您的回复,我所做的是使用多个路由并让路由操作根据条件确定要显示的路由。
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多