Buenas tardes, escribo en esta oportunidad porque estoy utilizando el motor de plantilla twig en mi proyecto lo estoy trabajando en el patrón MVC, tengo un layout.html.twig en la carpeta default y los demás archivos en otras carpeta, pero me da el siguiente error:
Unable to find template "layout.html.twig" (looked into: C:\xampp\htdocs\historial\views\usuario) in "index.html.twig" at line 1.
Cuando coloco el archivo layout.html.twig
en la carpeta usuario me funciona bien pero no puedo tener ese archivo allí sino en la carpeta default/
. Este es el código que estoy utilizando:
$directorio=ROOT . 'views' . DS . $this->_controlador . DS; $rutaFile=$vista . '.html.twig'; $loader = new Twig_Loader_Filesystem($directorio); $twig = new Twig_Environment($loader, array( 'cache' => $this->cache_dir, 'debug' => 'false')); $template = $twig->loadTemplate($rutaFile); echo $template->render(array());
¿Qué puedo tener malo?
Respuestas
Por motivos de seguridad, Twig no te deja incluir archivos que estén en algún directorio por encima del directorio raíz que has configurado para tus plantillas.
Por la forma de funcionar de tu código, le estás diciendo a Twig que busque las plantillas en usuario/
, pero la plantilla layout.html.twig
está en usuario/../default/
y por eso no funciona.
Lo que debes hacer es configurar el mismo directorio raíz para todas las plantillas y cambiar el nombre de cada plantilla. En vez de buscar la plantilla listar.html.twig
en views/usuario/
, puedes buscar la plantilla usuario/listar.html.twig
en el directorio views/
. Algo así:
$directorio = ROOT . 'views' . DS; $rutaFile = $this->_controlador . DS $vista . '.html.twig'; $loader = new Twig_Loader_Filesystem($directorio); $twig = new Twig_Environment($loader, array( 'cache' => $this->cache_dir, 'debug' => 'false')); $template = $twig->loadTemplate($rutaFile); echo $template->render(array());
Y en tus plantillas, no intentes extender de layout.html.twig
sino de default/layout.html.twig
@javiereguiluz
Muchas gracias ahora si me funciona :)
@eng_teresa