He construido una extensión de rama para hacer algunas cosas y una de ellas es renderizar una plantilla. ¿Cómo puedo acceder desde dentro de la extensión twig al entorno del motor y llamar al método Render?Plantilla de renderizado desde la extensión de rama
Respuesta
Se puede definir la extensión de manera que necesita el medio ambiente. Twig lo pasará automáticamente a la función.
public function getFunctions()
{
return array(
new \Twig_SimpleFunction(
'myfunction',
array($this, 'myFunction'),
array('needs_environment' => true)
),
);
}
public function myFunction(\Twig_Environment $environment, string $someParam)
{
// ...
}
Con esta función el usuario puede pasar a la instancia ambiente ramita para una extensión ramita
private $environment;
public function initRuntime(\Twig_Environment $environment)
{
$this->environment = $environment;
}
A continuación, realice $ this-> environment-> render() – ojreadmore
initRuntime ahora está en desuso. El entorno de las necesidades de @tvlooy es la respuesta correcta. – MECU
@tvlooy answer Danos una indirecta pero no funcionó para mí. Lo que necesitaba para lograrlo es:
namespace AppBundle\Twig;
class MenuExtension extends \Twig_Extension
{
public function getName()
{
return 'menu_extension';
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('myMenu', [$this, 'myMenu'], [
'needs_environment' => true,
'is_safe' => ['html']
])
];
}
public function myMenu(\Twig_Environment $environment)
{
return $environment->render('AppBundle:Menu:main-menu.html.twig');
}
}
que necesitaba addtionaly añadir 'is_safe' => ['html']
para evitar autoescaping de HTML.
También he registrado la clase como servicio de Symfony:
app.twig.menu_extension:
class: AppBundle\Twig\MenuExtension
public: false
tags:
- { name: twig.extension }
en la plantilla RAMITA He añadido {{ myMenu() }}
trabajo con "twig/twig": "~1.10"
y Symfony 3.1.3 versión
'needs_environment' => true es el verdadero problema aquí. +1 –
- 1. plantilla de renderizado Django dentro de una plantilla
- 2. Plantilla de renderizado a variable en expressjs
- 3. plantilla de renderizado Django en una ventana emergente
- 4. Plantilla de renderizado de plantillas de manillares como texto
- 5. Actualizando la rama actual desde la rama padre
- 6. Obtener ImageFormat desde la extensión de archivo
- 7. jinja2 carga el archivo de plantilla desde la plantilla
- 8. desde la plantilla de subrayado a mustache.js
- 9. show commits desde la creación de la rama
- 10. ¿Los parámetros de plantilla de la plantilla son una extensión o parte del estándar?
- 11. Obtener la versión del navegador desde la extensión de Firefox
- 12. Incluyendo el nombre de la rama actual en la plantilla de confirmación
- 13. SVN: Cree una rama desde la rama y fusione con la troncal
- 14. Intentando fusionar desde la rama a la rama principal y cerrar en Mercurial
- 15. Interceptar cuerpo de solicitud HTTP desde la extensión de cromo
- 16. Acceso al sistema de archivos desde la extensión de Firefox
- 17. ¿Entidades de renderizado en colas?
- 18. ¿Puedo establecer el valor para el atributo renderizado desde JavaScript?
- 19. Git: creó una nueva rama de la rama equivocada
- 20. Cómo reemplazar la rama principal con la rama de experimento
- 21. Puede métodos de extensión puede llamar desde la ventana inmediata
- 22. Obtener icono grande desde la extensión de archivo
- 23. Cómo agrego manejador de protocolo a firefox desde la extensión
- 24. Acceda a las cookies desde la extensión de Google Chrome
- 25. ¿Hay alguna manera de mostrar claramente la rama actual de TFS desde Visual Studio?
- 26. rama SVN de una rama
- 27. git - extracción desde una rama específica
- 28. ¿Cómo puedo abrir la página emergente de mi extensión de Chrome desde el script de contenido de la extensión?
- 29. Backbone Plantilla de plantilla
- 30. Obteniendo HTML en el controlador desde la plantilla de vista
\ Twig_Function_Method está en desuso, use \ Twig_SimpleFunction – spectralsun