控制器中具有相同实体的不同操作

时间:2015-10-20 15:45:34

标签: php symfony

我有一个实体" 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。

感谢您的帮助。

1 个答案:

答案 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,
    );
}