Symfony route {id} / + перенаправить или показать правильный слаг, если отсутствует - PullRequest
0 голосов
/ 17 декабря 2018

В 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 голосов
/ 17 декабря 2018

Изначально вы можете получить объект Question, используя ParamConverter , и в случае, если слаг будет неверным, перенаправьте на нужный маршрут:

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