Symfony route {id}/ + 重定向到或如果丢失则显示正确的 slug

Symfony route {id}/ + redirect to or show correct slug if missing

在 Whosebug 上,对于一个问题,您会在 url 中看到类似这样的内容: https://whosebug.com/questions/{question.id}/{question.slug}

如果删除 slug 或对其进行更改,您将被重定向到包含正确 slug 的 URL,所有操作都已完成,因为只有 question.id 需要匹配。我正试图在 Symfony 项目中实现同样的目标。我已经走得够远了,进入(或遗漏)的 slug 对路线没有任何影响。我唯一没有做到的是向用户发送(或显示)完整正确的 slug。

这是我的代码:

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

所以简而言之,我已经实现的是可以输入任何 slug 或根本没有 slug,但是尚未显示重定向到属于 {id} 的 slug。

最初,您可以使用 ParamConverter 获取问题对象,如果 slug 错误,则重定向到正确的路径:

/**
 * @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