#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>’); } }