Symfony重定向到路由传递url段塞

Symfony重定向到路由传递url段塞,symfony,redirect,Symfony,Redirect,我之前已经搜索过了,但似乎给出的唯一答案是当参数作为查询字符串传递时,这不是我想要的 我在我的Symfony 3 CRM中有一个页面,上面有一条路径app\u little。有一个名为little\u id的必需URL段塞,需要将其传递到路由以确定要显示的垃圾数据,如下所示: /垃圾/1 路由文件中我的路由定义为: app_view_litter: path: /litter/{id} defaults: { _controller: AppBundle:Litter:view,

我之前已经搜索过了,但似乎给出的唯一答案是当参数作为查询字符串传递时,这不是我想要的

我在我的Symfony 3 CRM中有一个页面,上面有一条路径
app\u little
。有一个名为
little\u id
的必需URL段塞,需要将其传递到路由以确定要显示的垃圾数据,如下所示:

/垃圾/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检索到的对象。但是,这会重定向到:

/垃圾?垃圾id=1


这是行不通的,因为它期待一个鼻涕虫。是否可以使用
redirectToRoute()
(或任何其他方法)以slug而不是查询字符串呈现路由?

是否可能是您使用了错误的路由?尝试使用
app\u view\u little
而不是
app\u little

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

可能是你走错了路线吗?尝试使用
app\u view\u little
而不是
app\u little

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

因为您的路线定义是:

app_view_litter:
    path: /litter/{id}
    defaults: { _controller: AppBundle:Litter:view, id: null }
    requirements:
        id: \d+
使用route generator时,您需要提供一个关联数组,其中包含与占位符名称对应的键,在您的示例中为
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\u litter\u using\u slug',array('slug'=>$litter->getSlug())

,因为您的路线定义是:

app_view_litter:
    path: /litter/{id}
    defaults: { _controller: AppBundle:Litter:view, id: null }
    requirements:
        id: \d+
使用route generator时,您需要提供一个关联数组,其中包含与占位符名称对应的键,在您的示例中为
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\u litter\u using\u slug',array('slug'=>$litter->getSlug())

显示路线定义。@BorisGuéry已将其添加到问题中。显示路线定义。@BorisGuéry已将其添加到问题中。不,路线没有错。这是单独的页面,不是所有垃圾的列表。正如Boris指出的,您应该使用
id
作为参数,查看路线定义,路线名称应该是
app\u view\u litter
。我会更新答案。这仍然不起作用。我试图理解的一点是,它将其作为查询字符串而不是URL中的slug返回。这听起来像是路由在匹配未定义该参数的调用。因此,如果您使用上面的调用生成url,您将被重定向到
/litter?id={id}
?是否为
垃圾
术语配置了其他路由?不,路由没有错误。这是单独的页面,不是所有垃圾的列表。正如Boris指出的,您应该使用
id
作为参数,查看路线定义,路线名称应该是
app\u view\u litter
。我会更新答案。这仍然不起作用。我试图理解的一点是,它将其作为查询字符串而不是URL中的slug返回。这听起来像是路由在匹配未定义该参数的调用。因此,如果您使用上面的调用生成url,您将被重定向到
/litter?id={id}
?是否为
little
术语配置了其他路由?嗯,好的,我错过了-但即使我使用
little?id=1
它仍然失败,因为它认为id为空。错误是在null上调用成员函数getBlah(),当路径应该是litter/1时,为什么要使用litter?id=1?你能提供完整的行动吗code@MichaelEmerson它可能会失败,因为它不应该匹配任何有效的路由,
/litter?id={id}
与您的实际需求不匹配。@BorisGuéry是的,我知道它会因此失败!这就是为什么我问这个问题,如何在URL中作为slug传递它@MichaelEmerson,编辑。尽管如此,我还是建议您深入了解组件的工作原理。嗯,好吧,我忽略了这一点——但即使我使用
litter?id=1
,它仍然会失败,因为它认为id是空的。错误是在null上调用成员函数getBlah(),当路径应该是litter/1时,为什么要使用litter?id=1?你能提供完整的行动吗code@MichaelEmerson它可能会失败,因为它不应该匹配任何有效的路由,
/litter?id={id}
与您的实际需求不匹配。@BorisGuéry是的,我知道它会因此失败!这就是为什么我问这个问题,如何在URL中作为slug传递它@MichaelEmerson,编辑。不过,我建议您深入了解组件的工作原理。