我有一个实体" Page"它有一个slu .. 我在我的控制器中得到了这个slug来呈现正确的内容。 我想对特定页面有不同的行为。 我找到的唯一解决方案是根据slug进行切换。 问题是如果slu改变(SEO)我还需要在控制器中更改它。
class Page extends BaseEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Gedmo\Slug(fields={"frontname"})
* @ORM\Column(length=255, unique=true)
*/
private $slug;
//...
页面控制器:
class PageController extends Controller
{
public function showAction(Request $request)
{
$slug = $request->get('slug_page');
$page = $this->getDoctrine()->getRepository('AppBundle:Autre')->findOneBy(array('slug' => $slug));
if (!$page) {
throw $this->createNotFoundException('Page introuvable.');
}
switch($slug){
case 'notre-equipe':
return $this->render('@App/Frontend/equipe/list.html.twig');
// etc....
}
return $this->render('AppBundle::Frontend/page/index.html.twig', array(
'page' => $page,
));
}
}
有没有更清洁的解决方案呢? 我使用的是symfony 2.7。
感谢您的帮助。
答案 0 :(得分:0)
我建议将slug作为你网址的一部分:
/**
* @Route("/{slug}", name="page_show")
* @Method("GET")
* @Template()
*/
public function showAction($slug)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AppBundle:Autre')->findOneBy(array('slug' => $slug));
if (!$entity) {
throw $this->createNotFoundException('Unable to find Autre entity.');
}
return array(
'entity' => $entity,
);
}