He buscado mucho en la red cómo acceder al conjunto global $_SESSION
de la plantilla TWIG y encontré esto: {{app.session.get('index')}}
, pero cuando lo estoy llamando, devuelve una cadena vacía. Tengo un $_SESSION['filter']['accounts']
y aparece este error al llamar al {{app.session.get('filter').accounts}}
: Item "accounts" for "" does not exist
. ¿Qué estoy haciendo mal?Accediendo a la sesión desde la plantilla TWIG
Respuesta
{{app.session}}
se refiere al objeto Session
y no al conjunto $_SESSION
. No creo que se pueda acceder al conjunto $_SESSION
a menos que lo transfiera explícitamente a cada plantilla Twig o si hace una extensión que lo haga disponible.
Symfony2 está orientado a objetos, por lo que debe usar el objeto Session
para establecer atributos de sesión y no confiar en la matriz. El objeto Session
extraerá estas cosas de usted, por lo que es más fácil, por ejemplo, almacenar la sesión en una base de datos porque el almacenamiento de la variable de sesión está oculto para usted.
Por lo tanto, establezca su atributo en la sesión y recupere el valor en su plantilla twig utilizando el objeto Session
.
// In a controller
$session = $this->get('session');
$session->set('filter', array(
'accounts' => 'value',
));
// In Twig
{% set filter = app.session.get('filter') %}
{% set account-filter = filter['accounts'] %}
Espero que esto ayude.
Saludos,
Matt
Un truco sencillo es definir la matriz $ _SESSION como una variable global. Para ello, editar el archivo en la carpeta core.php extensión mediante la adición de esta función:
public function getGlobals() {
return array(
'session' => $_SESSION,
) ;
}
A continuación, podrás acces a cualquier variable de sesión como:
{{ session.username }}
si quieres acceda a
$_SESSION['username']
¿Por qué no usa {{app.object name.field name}} para acceder a la variable?
Encontré que la forma más limpia de hacer esto es crear un TwigExtension personalizado y anular su método getGlobals()
. En lugar de usar $_SESSION
, también es mejor usar la clase Session
de Symfony, ya que se encarga de iniciar/detener automáticamente la sesión.
Tengo la siguiente extensión en /src/AppBundle/Twig/AppExtension.php:
<?php
namespace AppBundle\Twig;
use Symfony\Component\HttpFoundation\Session\Session;
class AppExtension extends \Twig_Extension {
public function getGlobals() {
$session = new Session();
return array(
'session' => $session->all(),
);
}
public function getName() {
return 'app_extension';
}
}
A continuación, agregue esto en /app/config/servicios.yml:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
A continuación, la sesión se puede acceder desde cualquier punto de vista usando:
{{ session.my_variable }}
Configuración ramita
$twig = new Twig_Environment(...);
$twig->addGlobal('session', $_SESSION);
Luego, dentro de sus valores de sesión de acceso plantilla por ejemplo
$_SESSION['username'] in php file Will be equivalent to {{ session.username }} in your twig template
La forma de acceder a una variable de sesión en Twig es:
{{ app.session.get('name_variable') }}
- 1. Accediendo a typedef desde la instancia
- 2. ¿Cómo accedo a la función Twig path() desde un controlador?
- 3. Django: accediendo a las variables de sesión desde dentro de una plantilla?
- 4. Frasco - Accediendo a la variable de configuración en la plantilla
- 5. Accediendo a la fuente personalizada desde Jar
- 6. plantillas de jquery, accediendo a la variable primaria desde la plantilla secundaria
- 7. Accediendo a valores de matriz usando la clave de matriz de Twig
- 8. Accediendo a la plantilla de Django {{Variable}} de JavaScript
- 9. ¿Cómo escapar de los delimitadores Twig en una plantilla Twig?
- 10. accediendo a localhost desde vm
- 11. accediendo a R desde SAS
- 12. Accediendo a RequestContext desde global.asax
- 13. desde la plantilla de subrayado a mustache.js
- 14. Django: ¿accediendo a la instancia del modelo desde ModelAdmin?
- 15. Accediendo a la transmisión de video desde el dispositivo Looxcie
- 16. Symfony2 Assetic + plantilla Twig JavaScript Herencia
- 17. ¿Cómo acceder a un objeto subyacente desde el FormView de Twig en una plantilla?
- 18. Accediendo a FacesContext desde el servicio web
- 19. Plantilla de renderizado desde la extensión de rama
- 20. Accediendo a Heroku Postgres Instance desde EC2
- 21. Accediendo a un cygwin symlink desde Windows
- 22. Accediendo a vistas desde otro hilo (Android)
- 23. Accediendo a la clase principal en Backbone
- 24. Twig templates engine: obtener la URL actual
- 25. Accediendo a LocalStorage desde un webWorker
- 26. Django - accediendo al RequestContext desde un filtro personalizado
- 27. Accediendo a la vista en awakeFromNib?
- 28. Symfony2: ¿Cómo incluir adecuadamente los activos junto con la herencia de la plantilla Twig?
- 29. Accediendo al nombre de la aplicación desde dentro de una plantilla de rieles al generar la aplicación de rieles
- 30. Variables de Twig en twig variable
¡NO use $ _SESSION en Symfony! – Gigala