我有一个网络应用程序设置使用不同的类别与一对多关系发布。
这很好,我将其显示为category1
,category2
,category3
前缀/ {slug}。
我的问题是我的搜索结果会返回使用不同showactions的不同类别的帖子。
如何设置它以便在显示搜索结果后,即使他们使用不同的showactions,我也可以选择它们? (不使用像/{slug}
这样的通用路由减去类别类型的开头前缀。)
<h1><a href="{{ path('acme_demo_category1_show', { slug: post.slug }) }}">{{ post.title }}</a></h1>
showCategory1Action
/**
* @Route("/category1/{slug}", name="acme_demo_category1_show")
* @Template("AcmeDemoBundle:Category:show.html.twig")
*/
public function showCategory1Action($slug)
{
$article = $this->getDoctrine()->getRepository('AcmeDemoBundle:Category1')
->findOneBy(array(
'slug' => $slug
));
if (null === $article) {
throw $this->createNotFoundException('Post was not found');
}
return array(
'article' => $article,
);
答案 0 :(得分:2)
更新(请参阅评论)
所以你想要的是拥有反映帖子类别的网址,即:football / launch-world-cup.html 为此,您需要为Post实体以及Category实体设置一个slug属性。
您的路由应该看起来像这样
acme_demo_show:
pattern: /{catslug}/{postslug}.html
defaults: { _controller: AcmeDemoBundle:Default:show }
您的控制器的showAction
方法将接受2个参数,在树枝中您可以使用
<h1><a href="{{ path('acme_demo_show' , { catslug: post.category.slug, postslug: post.slug }) }}">{{ post.title }}</a></h1>
在具有slug足球的类别中发布了具有slug世界杯发布的帖子将导致www.mywebsite.com/football/world-cup-launch.html