【问题标题】:Symfony 2 optional route url parts (wildcard?)Symfony 2 可选路由 url 部分(通配符?)
【发布时间】:2013-05-18 10:37:02
【问题描述】:

在 Symfony 2.2.1 中是否可以创建如下路由:

/search/category_ids/1,2,3,4/subcategory_ids/32,23,9/language_ids/10,23,5 ...

每个 url 部分都是可选的,例如用户可以访问 url

/search/category_ids/1,2,3,4/language_ids/10,23,5 ...

甚至

/search/subcategory_ids/2,23 

我想摆脱传统的 get 参数,转而支持这一点,主要是为了美观。

【问题讨论】:

    标签: php symfony routing wildcard


    【解决方案1】:

    虽然有些框架不鼓励使用查询字符串,但 symfony 不鼓励,您应该只在查询字符串中传递参数:

    /search?category_ids=1,2,3,4&subcategory_ids=...
    

    可以通过请求对象访问这些参数:

    public function searchAction(Request $request) {
        $category_ids = $request->query->get('category_ids');
    }
    

    如果你真的需要在路径中传递参数,你可以在你的路由末尾加上一个“匹配所有”参数来达到同样的效果:

    @Route("/search/{params}", requirements={"params"=".*"}, defaults={"params"=""})
    public function searchAction($params) {
    
    }
    

    你可以像这样解析$params

    $parts = explode('/', $params);
    $map = array();
    for ($i = 0; $i < count($parts); $i+=2) {
        $map[$parts[$i]] = $parts[$i+1];
    }
    

    【讨论】:

    • 解决方案解决问题。但是你失去了路由系统的灵活性,现在你的控制器有了新的责任。
    • 注意路由参数名(这里的{params})必须小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多