Symfony重定向到路由传递url slug

时间:2017-01-18 14:14:57

标签: symfony redirect

我以前在SO上搜索过这个,但似乎给出的唯一答案是参数作为查询字符串传递的时候,这不是我想要的。

我的Symfony 3 CRM中有一个页面app_litter。有一个名为litter_id的必需URL slug需要传递给路由,以确定要显示的垃圾数据,如下所示:

  

/升/ 1

路由文件中的路由定义是:

app_view_litter:
    path: /litter/{id}
    defaults: { _controller: AppBundle:Litter:view, id: null }
    requirements:
        id: \d+

有一个功能允许用户将小狗添加到他们的垃圾中,这是本页之外的一种形式 - 一旦小狗成功保存,我想将用户重定向回有问题的垃圾,所以我做了这样:

return $this->redirectToRoute('app_litter', array('litter_id' => $litter->getId()));

其中$litter是从Symfony检索的对象。但是,这会重定向到:

  

/升?litter_id = 1

哪个不起作用,因为它需要一个slu ..是否可以使用redirectToRoute()(或任何其他方法)使用slug而不是查询字符串来呈现路径?

2 个答案:

答案 0 :(得分:3)

因为您的路线定义是:

app_view_litter:
    path: /litter/{id}
    defaults: { _controller: AppBundle:Litter:view, id: null }
    requirements:
        id: \d+

使用路由生成器时,您需要提供一个关联数组,其中包含与占位符名称相对应的键id

因此,必须是:

$this->redirectToRoute('app_litter', array('id' => $litter->getId()));

如果你想使用一个slug,并且那里不仅包含数字(\d+),你必须定义一条新路线或修改现有路线。

app_view_litter_using_slug:
    path: /litter/{slug}
    defaults: { _controller: AppBundle:Litter:view, slug: null }
    requirements:
        id: .*

你有类似的事情:

$this->redirectToRoute('app_litter_using_slug', array('slug' => $litter->getSlug()));

答案 1 :(得分:1)

你是否使用了错误的路线?尝试使用app_view_litter代替app_litter

return $this->redirectToRoute('app_view_litter', array('id' => $litter->getId()));