Symfony路由{id} / +重定向至或丢失时显示正确的子弹

时间:2018-12-17 17:43:27

标签: symfony routing symfony4

在StackOverflow上,对于一个问题,您将在url中看到以下内容: https://stackoverflow.com/questions/{question.id}/{question.slug}

如果您删除或更改了该条,您将被重定向到包含正确的条的URL,因为只有question.id才需要匹配,所以全部完成。我正在尝试在Symfony项目中实现相同的目标。我已经走得足够远了,以至于输入(或忽略)的弹头对路线没有任何影响。我唯一没有实现的就是向用户发送(或显示)完整正确的子弹。

这是我的代码:

/**
 * @Route("/{id}/{slug}", name="entity_show", defaults={"slug" = null})
 */
public function showEntity(Request $request, $id, EntityRepository $entityRepository)
{
   //.....rest of code here

简而言之,我存档的内容是可以输入任何段,也可以完全不输入段,但是尚未显示对属于{id}的段的重定向。

1 个答案:

答案 0 :(得分:1)

最初,您可以使用ParamConverter来获得Question对象,以防万一the弹错误地将其重定向到正确的路由:

/**
 * @Route("/{id}/{slug}", name="entity_show", defaults={"slug" = null})
 */
public function showEntity(Request $request, Question $question, $slug, EntityRepository $entityRepository)
{
       if ($question->getSlug() !== $slug) {
           return $this->redirectToRoute('entity_show', ['id' => $question->getId(), 'slug' => $question->getSlug()]);
       }
       .... 
       do whatever you need