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
在 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