2015-10-20 74 views
1

我有一个实体“Page”,它拥有一个slu。。 我在控制器中得到这个slu to以呈现正确的内容。 我想对特定页面有不同的行为。 我发现的唯一解决方案是根据slu switch进行切换。 问题是,如果slu changes改变(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

您可以创建基于蛞蝓价值的路线,但那么你就需要更新路由文件时蛞蝓改变。同样的问题。您需要在某处映射slug值,如果值发生更改,则映射将需要更新。 – Cerad

回答

0

我建议让你的URL的一部分废料:

/** 
* @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, 
    ); 
} 
相关问题