Разное действие с одним и тем же объектом в контроллере

1

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

Спасибо за вашу помощь.

  • 0
    Вы можете создавать маршруты на основе значения slug, но тогда вам нужно будет обновить файл маршрутизации при изменении slugs. Такая же проблема. Вам необходимо отобразить значение слага где-нибудь, и если значение изменится, то отображение необходимо будет обновить.
Теги:

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню