Symfony - ID и удобные для пользователя маршруты

Пример использования:

  • У меня есть данные с идентификатором и МАРШРУТ
  • У меня есть список ссылок и маршрутизатор, которые используют идентификатор, поэтому, если заголовок или маршрут когда-либо изменится, ссылки всегда будут указывать на один и тот же контент.
  • Я хотел бы, чтобы ROUTE отображался в URL-адресе вместо идентификатора, когда пользователь переходит на страницу для удобства использования и в целях SEO.

В настоящее время я использую для этого перенаправление и сомневаюсь, что это правильный способ справиться с этим.

public function show($slug)
{
  $list = array(
    // blog data goes in here
  };
  // when we go to the blog post page, we loop through the blog post data
  foreach ($list as $post) {
    // if the slug from our url is equal to the ID
    if ($slug == $post['id']){
      // redirect to the user-friendly route instead
      $route = '/blog/' . $post['route'];
      return $this->redirect($route);
    }
    // if this is the user-friendly, route, then render the page
    if ($slug == $post['route']) {
        $title = $post['title'];
        $content = $post['content'];
    }
  }
  // hello/show.html.twig is the twig template I'm currently using to render single pages
  return $this->render('hello/show.html.twig', [
    'title' => $title,
    'content' => $content,
  ]);
}   

Технически это работает, но я не думаю, что это действительно правильный метод. Есть ли лучший способ использовать два маршрута для одного и того же представления и отдать предпочтение одному маршруту по сравнению с другим где-то между щелчком по ссылке и отображением страницы?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
56
2

Ответы 2

Если вы используете Symfony, просто введите свой маршрут в файле routing.yml. Любое действие контроллера должно иметь один рендеринг, в настоящее время вы не используете фреймворк.

Подробнее об этом читайте в док. Вместо перенаправления вы можете вызвать действие внутри действия.

https://symfony.com/doc/current/components/routing.html#load-routes-from-a-file

Ага. Я использую для этого файл маршрутизации. Я просто не уверен, какую методологию использовать, чтобы выбрать одно из них. # config / routes.yaml blog_list: path: / blog controller: App \ Controller \ BlogController :: list blog_show: path: / blog / {slug} controller: App \ Controller \ BlogController :: show

Loopy 29.08.2018 17:46

Просто создайте в своем репозитории метод под названием findOneByIdOrSlug и создайте запрос, передающий значение, полученное из URI, в предложение where с помощью или. Убедитесь, что вы ограничили результат одним и правильно обрабатываете исключения.

Затем вызовите этот метод из контроллера, и все должно работать.

Не могу предоставить код, потому что я сейчас на своем телефоне.

Другие вопросы по теме