Пример использования:
В настоящее время я использую для этого перенаправление и сомневаюсь, что это правильный способ справиться с этим.
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,
]);
}
Технически это работает, но я не думаю, что это действительно правильный метод. Есть ли лучший способ использовать два маршрута для одного и того же представления и отдать предпочтение одному маршруту по сравнению с другим где-то между щелчком по ссылке и отображением страницы?




Если вы используете Symfony, просто введите свой маршрут в файле routing.yml. Любое действие контроллера должно иметь один рендеринг, в настоящее время вы не используете фреймворк.
Подробнее об этом читайте в док. Вместо перенаправления вы можете вызвать действие внутри действия.
https://symfony.com/doc/current/components/routing.html#load-routes-from-a-file
Просто создайте в своем репозитории метод под названием findOneByIdOrSlug и создайте запрос, передающий значение, полученное из URI, в предложение where с помощью или. Убедитесь, что вы ограничили результат одним и правильно обрабатываете исключения.
Затем вызовите этот метод из контроллера, и все должно работать.
Не могу предоставить код, потому что я сейчас на своем телефоне.
Ага. Я использую для этого файл маршрутизации. Я просто не уверен, какую методологию использовать, чтобы выбрать одно из них. # config / routes.yaml blog_list: path: / blog controller: App \ Controller \ BlogController :: list blog_show: path: / blog / {slug} controller: App \ Controller \ BlogController :: show