Создание множества подстраниц, symfony

#php #symfony #twig

#php #symfony #twig

Вопрос:

Как я должен создать множество подстраниц, которые имеют одинаковую структуру содержимого?

Должен ли я делать для каждой подстраницы один контроллер и один шаблон twig или, может быть, я могу сделать один контроллер и один шаблон для всех страниц? Например, у каждой подстраницы будет своя галерея, QA форум.

Комментарии:

1. я бы сказал, создайте 1 файл шаблона и сделайте так, чтобы контроллер получал правильную страницу на основе запроса, а затем заполнял переменные шаблона. вы можете использовать таблицу pages в своей базе данных или что-то в этом роде

2. могу ли я создавать маршруты, получая фрагменты из базы данных? Аналогично с контроллером

3. если вы просто отправляете уникальный идентификатор страницы в запросе, вы также можете позволить контроллеру обрабатывать все остальное, нет необходимости в дополнительных маршрутах

Ответ №1:

Если ваши подстраницы динамичны или у них есть определенные уникальные свойства для идентификации, вы должны сделать это с помощью single controller и single template .

Даже для динамического макета вы можете выбрать динамические шаблоны, вызываемые из одного Controller .

Только если вам нужно статическое изменение параметров в url структуре или частые изменения в вашем источнике resource , выбирайте другой контроллер.

Редактировать

Ниже приведена небольшая ссылка на код для того, о чем я говорю.

 use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpKernelExceptionNotFoundHttpException;

class LuckyController extends Controller{

    /**
     * @Route("/subpage/{slug}")
     */
    public function numberAction($slug)
    {
        $em = $this->getDoctrine()->getManager();

        $subPage = $em->getRepository("AppBundle:SubPage")->findBy(array('slug' => $slug));
        if (!$subPage) {
            throw new NotFoundHttpException('Entity not found!');
        }

        return $this->render('default/sub_page.html.twig', array(
            'subpage' => $subPage
        ));
    }
}
  

Я предполагаю, что подстраницы хранятся в базе данных, и у вас есть ORM , которая обрабатывает работу с базой данных через EntityManager

Вывод осуществляется через twig шаблон.

Надеюсь, это поможет.

Комментарии:

1. Сначала я должен создать таблицу базы данных со всеми подстраницами, а затем для всех них маршруты и контроллер, который должен будет сравнивать запрос с этой базой данных?

2. У вас должно быть slug свойство на вашей подстранице, которое должно быть уникальным и которое должно быть частью параметра dynamic route.

3. даже если я хочу 100 подстраниц?

4. вы можете создать столько, сколько. Я предложил создать slug, чтобы сделать URL каждой подстраницы персонализированным, презентабельным и удобным для SEO. Если ваши подстраницы недоступны для общего доступа, вы можете использовать идентификатор автоматического увеличения.

5. класс LuckyController { /** * @Route(«/счастливое/число/{max}») */ общедоступная функция numberAction($max) { $number = mt_rand(0, $max); возвращает новый ответ( ‘<html><body>Счастливое число: ‘.$number.'</body></html>’); } }