【发布时间】:2021-05-01 07:12:39
【问题描述】:
我的类别 url 同时包含 id 和 slug,例如 https://myapp.com/category/56-category-name(数据库中的 id 字段 = 56 和 slug 字段 = 类别名称),当更新类别名称时,数据库中的 slug 字段会更新,但 id 仍然相同。 我想显示我的类别,只要 id 正确,当然显示正确的 url。在这种情况下,我认为 SEO 仍然正确。
这里是我的展示方法:
/**
* @Route("/category/{id}-{slug}", name="category_show", requirements={"id"="\d+"})
*/
public function show(CategoryRepository $categoryRepository, $slug, $id): Response
{
$category = $categoryRepository->find($id);
if($category->getSlug() !== $slug) {
return $this->redirectToRoute('category_show', [
'id' => $id,
'slug' => $category->getSlug()
]);
}
return $this->render('category/show.html.twig', [
'category' => $category
]);
}
如果给定的 id 存在于 DB 中,它可以工作,否则我得到一个错误 在 null 上调用成员函数 getSlug()。我可以抛出 NotFoundException,但我认为这种方法会使用多次查询。
所以请帮助我以更高的灵活性和性能正确地完成这些工作。 如果我想在帖子网址中显示类别以及https://myapp.com/56-category-name/23-post-title 怎么办??
提前致谢
【问题讨论】:
-
您好,如果我理解您的问题,可以尝试在您的存储库中创建一个自定义方法,例如“findByIdOrSlug”,您对此有何看法?