У меня есть сущность "Страница", которая обладает слизью. Я получаю эту пулю в своем контроллере, чтобы отобразить правильный контент. Я хотел бы иметь другое поведение для определенных страниц. Единственное решение, которое я нашел, - это переключиться в зависимости от пули. Проблема в том, что если изменения в slug (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.
Спасибо за вашу помощь.
я бы предложил сделать пустую часть вашего 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,
);
}