Cómo cargar una plantilla de la ruta completa en la plantilla de la ramita del motor -- php campo con templates campo con template-engine campo con twig camp Relacionados El problema

How to load a template from full path in the template engine TWIG


10
vote

problema

Español

Me pregunto cómo cargar una plantilla de su camino completo (como Archivo constante).

En realidad, tiene que establecer una ruta de "root" para la plantilla como esta:

  require_once '/path/to/lib/Twig/Autoloader.php'; Twig_Autoloader::register();  $loader = new Twig_Loader_Filesystem('/path/to/templates'); $twig = new Twig_Environment($loader, array(    'cache' => '/path/to/compilation_cache', ));   

y luego:

  $template = $twig->loadTemplate('index.html'); echo $template->render(array('the' => 'variables', 'go' => 'here'));   

Quiero llamar al método LoadTemplate con una ruta completa y no el nombre del archivo.

¿Cómo puedo hacer?

No quiero crear mi propio cargador para tal cosa.

gracias

Original en ingles

I'm wondering how to load a template from it's full path (like FILE constant give).

Actually you have to set a "root" path for template like this :

require_once '/path/to/lib/Twig/Autoloader.php'; Twig_Autoloader::register();  $loader = new Twig_Loader_Filesystem('/path/to/templates'); $twig = new Twig_Environment($loader, array(    'cache' => '/path/to/compilation_cache', )); 

And then :

$template = $twig->loadTemplate('index.html'); echo $template->render(array('the' => 'variables', 'go' => 'here')); 

I want to call the loadTemplate method with a full path and not the just the name of the file.

How can i do ?

I don't want to create my own loader for such an thing..

Thanks

           

Lista de respuestas

8
 
vote

solo haz eso:

  $loader = new Twig_Loader_Filesystem('/');   

para que - & gt; loadtemplate () cargará plantillas relativamente a / .

O si desea poder cargar plantillas tanto con ruta relativa como absoluta:

  $loader = new Twig_Loader_Filesystem(array('/', '/path/to/templates'));   
 

Just do that:

$loader = new Twig_Loader_Filesystem('/'); 

So that ->loadTemplate() will load templates relatively to /.

Or if you want to be able to load templates both with relative and absolute path:

$loader = new Twig_Loader_Filesystem(array('/', '/path/to/templates')); 
 
 
         
         
4
 
vote

Aquí hay un cargador que carga una ruta absoluta (o no) dada:

  <?php   class TwigLoaderAdapter implements Twig_LoaderInterface {     protected $paths;     protected $cache;      public function __construct()     {      }      public function getSource($name)     {         return file_get_contents($this->findTemplate($name));     }      public function getCacheKey($name)     {         return $this->findTemplate($name);     }      public function isFresh($name, $time)     {         return filemtime($this->findTemplate($name)) < $time;     }      protected function findTemplate($path)     {         if(is_file($path)) {             if (isset($this->cache[$path])) {                 return $this->cache[$path];             }             else {                 return $this->cache[$path] = $path;             }         }         else {             throw new Twig_Error_Loader(sprintf('Unable to find template "%s".', $path));         }     }  }  ?>   
 

Here is a loader that load an absolute (or not) path given :

<?php   class TwigLoaderAdapter implements Twig_LoaderInterface {     protected $paths;     protected $cache;      public function __construct()     {      }      public function getSource($name)     {         return file_get_contents($this->findTemplate($name));     }      public function getCacheKey($name)     {         return $this->findTemplate($name);     }      public function isFresh($name, $time)     {         return filemtime($this->findTemplate($name)) < $time;     }      protected function findTemplate($path)     {         if(is_file($path)) {             if (isset($this->cache[$path])) {                 return $this->cache[$path];             }             else {                 return $this->cache[$path] = $path;             }         }         else {             throw new Twig_Error_Loader(sprintf('Unable to find template "%s".', $path));         }     }  }  ?> 
 
 
 
 
4
 
vote

Extienda el cargador mejor que modificar la biblioteca:

  <?php  /**  * Twig_Loader_File  */ class Twig_Loader_File extends Twig_Loader_Filesystem {     protected function findTemplate($name)     {         if(isset($this->cache[$name])) {             return $this->cache[$name];         }          if(is_file($name)) {             $this->cache[$name] = $name;             return $name;         }          return parent::findTemplate($name);     } }    
 

Extend the loader better than modify the library:

<?php  /**  * Twig_Loader_File  */ class Twig_Loader_File extends Twig_Loader_Filesystem {     protected function findTemplate($name)     {         if(isset($this->cache[$name])) {             return $this->cache[$name];         }          if(is_file($name)) {             $this->cache[$name] = $name;             return $name;         }          return parent::findTemplate($name);     } }  
 
 
0
 
vote

Esto funciona para mí (twig 1.x):

  final class UtilTwig {     /**      * @param string $pathAbsTwig      * @param array $vars      * @return string      * @throws TwigErrorLoaderError      * @throws TwigErrorRuntimeError      * @throws TwigErrorSyntaxError      */     public static function renderTemplate(string $pathAbsTwig, array $vars)     {         $loader = new Twig_Loader_Filesystem([''], '/');         $twig = new Twig_Environment($loader);         $template = $twig->loadTemplate($pathAbsTwig);         $mailBodyHtml = $template->render($vars);          return $mailBodyHtml;     } }   

Uso:

  $htmlBody = UtilTwig::renderTemplate('/absolute/path/to/template.html.twig', [     'some' => 'var',      'foo' => 'bar' ]);   
 

This works for me (Twig 1.x):

final class UtilTwig {     /**      * @param string $pathAbsTwig      * @param array $vars      * @return string      * @throws \Twig\Error\LoaderError      * @throws \Twig\Error\RuntimeError      * @throws \Twig\Error\SyntaxError      */     public static function renderTemplate(string $pathAbsTwig, array $vars)     {         $loader = new Twig_Loader_Filesystem([''], '/');         $twig = new Twig_Environment($loader);         $template = $twig->loadTemplate($pathAbsTwig);         $mailBodyHtml = $template->render($vars);          return $mailBodyHtml;     } } 

Usage:

$htmlBody = UtilTwig::renderTemplate('/absolute/path/to/template.html.twig', [     'some' => 'var',      'foo' => 'bar' ]); 
 
 

Relacionados problema

5  ¿Cómo puedo agregar un filtro personalizado a mis plantillas de ramitas dentro de Slim?  ( How can i add a custom filter to my twig templates inside of slim ) 
usando el ejemplo de http://twig.senseniolabs.org/ DOC / Advanced.HTML # Creación-AN-Extension : Dentro de mi archivo Slim que crea la vista: $filter = ...

2  Plantillas de ramitas sobre entorno volátil (EC2)  ( Twig templates on volatile environment ec2 ) 
Tengo un entorno elástico de frijol con las instancias de EC2. Dado que estos son volátiles, no podemos confiar en ellos para almacenar archivos. Esta es un...

0  Divide dos variables en ramita / php  ( Divide two variables in twig php ) 
Estoy tratando de hacer algo que creo que debería ser muy simple con la ramita, sin embargo, estoy recibiendo un error. Simplemente quiero dividir dos varia...

2  No puedo mostrar la entrada de campo de contraseña (con opción 'repetir') con ramita (SymFony2)  ( I can not display the password field input with repeat option with twig sym ) 
Tengo la siguiente forma y plantilla de ramita: formype class UserType extends AbstractType { /** * @param FormBuilderInterface $builder * @param arra...

0  Cadena de consulta transliterada para Typehead.js  ( Transliterate query string for typeahead js ) 
Estoy usando TypeAheadjs y me gustaría translitar la consulta de búsqueda -Entonces se envía al servidor. @Dvad Zagorski le dio una excelente matriz PHP par...

1  Truncado dinámicamente truncado  ( String truncate dynamically set ) 
Estoy usando Symfony2, Twig y Twitter Bootstrap. No he encontrado ninguna solución para el siguiente problema. En ciertas partes de mi aplicación web, estoy...

43  Valor de incremento en el archivo de ramita  ( Increment value in twig file ) 
Tengo un bucle con un archivo .twig que sale elementos. Necesito incrementar un valor con cada elemento. Sé cómo hacerlo en PHP, pero no está claro cómo hac...

0  ¿Cómo manejar la matriz multidimensional en la plantilla XML?  ( How to handle multidimensional array on xml template ) 
Así que aquí está mi código ... que utilicé en mi proyecto. $app->post( '/chk_db', function () use ($app){ require_once 'lib/mysql.php'; ...

0  Symfony 4 Forma propia Tema no está cargando  ( Symfony 4 own form theme not loading ) 
Necesito un tema de formulario para un campo. No quiero cargarlo en el formulario _self. Así lo hice en Config / Paquetes / Ramita: twig: paths: ['%k...

-1  El formulario de bootstrap no funciona correctamente - Symfony  ( Bootstrap form does not work properly symfony ) 
Tengo un problema con Bootstrap (4.5.2) agregado al proyecto SymFony (5.1.3). He añadido todos los enlaces de la plantilla de inicio a base.html.twig Archiv...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos