Symfony2:为什么路由组件中不包含查询字符串参数?

我正在将遗留应用程序移植到Symfony2,我正在努力,因为路由不包括查询字符串参数.一些简单示例:假设您有一个书籍搜索页面,您可以根据条件筛选结果:

http://www.bookstore.com/books?author=Stephen King& maxPrice = 20

在这种情况下查询字符串参数的好处是,您可以使用任意数量的过滤器,使用您想要的任何给定请求,并且不会使用您未使用的过滤器来使用URL.

假设我们使用Symfony2路由组件重写了上述查询的路由.它可能看起来像这样:

http://www.mybookstore.com/book/any_title/stephen king / any_release_date / max_price_20 / any_min_price / any_format / any_category

即使没有考虑到任何长度不洁的URL,我仍然不认为它是直观的,因为该路线的每个“段”不是键值对而是仅仅是一个值(例如作者= Stephen King> /斯蒂芬·金/).

您当然可以通过将Request对象传递给action方法(例如indexAction(Request $request){)来访问控制器中的查询字符串参数,然后验证它们并将它们传递到应用程序的其他部分变得很麻烦(即我在哪里现在找到自己).如果您使用Knp菜单包来构建侧边栏并且您希望根据查询字符串参数将部件标记为.current,该怎么办?没有功能,只是与Symfony2路由集成的功能.

以及如何验证您的查询字符串参数是否可接受?我目前正在考虑将它们像表单一样进行验证,然后将它们传递到数据库中以生成查询.也许这就是Symfony2团队设想处理它们的方式?如果是这样,我真的很想知道原因.感觉我正在与应用程序作斗争.

最佳答案 我最终在Symfony Live旧金山2012问了Fabien这个问题.在同一个会议上有关于这个问题的另一个演讲,我将在这里与你分享幻灯片:

http://www.slideshare.net/Wombert/phpjp-urls-rest#btnNext

基本上在幻灯片中你可以看到作者同意我的查询字符串参数应该用于过滤.他们不应该使用的是确定内容来源.因此,路径应指向产品(或其他),然后应在控制器中使用查询字符串参数,以应用过滤该内容源所需的任何逻辑(根据Fabien).

我最终在我的应用程序中创建了一个实体,我将所有查询字符串参数绑定到然后进行操作,就像处理表单一样.事实上,当你想到它时,它基本上是一回事.

点赞