Я новичок в Symfony, и я создал множество HTML-шаблонов twig и эту функцию для маршрутизации в моем контроллере:
/**
* @Route("/{path}")
*/
public function renderTemplate($path) {
return $this->render('/'.$path.'/index.html.twig');
}
?>
Функция renderTemplate () отлично работает для всех папок первого уровня, но не для файлов подкаталогов, потому что кажется, что она прерывается после "/". Я не хочу писать десятки новых функций Route.
Как я могу реализовать все сайты, включая подкаталоги, разделенные "/"?
Что такое безопасная практика и простое решение?
Структура моей папки шаблонов веточек такова: Папка шаблонов
@Route
- это ваш URL, а не путь к файлу.
Путь по умолчанию в Symfony (3.4) - app/Ressources/view/
Таким образом, если вы хотите достичь app/Ressources/view/default/index.html.twig
, вы сделаете это:
return $this->render('default/index.html.twig');
Я только что нашел ответ здесь в документации Symfony.
Очевидно, вы можете разрешить "/" в своей переменной следующим образом:
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/share/{token}", name = "share", requirements = {"token" = ".+"})
*/
public function share($token)
{
// ...
}
}
Я назвал все свои шаблоны веток "index.html.twig" и поместил их в соответствующий путь к файлу в папке шаблонов, и теперь моя функция работает очень плавно для каждого сайта.
Возможно, мне придется изменить его позже, чтобы выполнять отдельные запросы, но это было удобное краткосрочное решение, позволяющее видеть все мои страницы с простыми и красивыми ссылками и только одной функцией маршрута в моем контроллере.