71 votes

Accès à la session à partir d'un modèle TWIG

J'ai beaucoup cherché sur le net comment accéder à l'interface globale de l'entreprise. $_SESSION à partir du modèle TWIG et j'ai trouvé ceci : {{app.session.get('index')}} mais lorsque je l'appelle, il renvoie une chaîne vide. J'ai un $_SESSION['filter']['accounts'] et j'obtiens cette erreur en appelant {{app.session.get('filter').accounts}} : Item "accounts" for "" does not exist . Qu'est-ce que je fais de mal ?

157voto

Matt Points 5550

{{app.session}} fait référence à la Session et non l'objet $_SESSION la matrice. Je ne pense pas que le $_SESSION est accessible sauf si vous le passez explicitement à chaque modèle Twig ou si vous faites une extension qui le rend disponible.

Symfony2 est orienté objet, vous devez donc utiliser la balise Session pour définir les attributs de la session et ne pas s'appuyer sur le tableau. L'adresse Session Il est donc plus facile de stocker la session dans une base de données, par exemple, car le stockage de la variable de session n'est pas visible.

Ainsi, définissez votre attribut dans la session et récupérez la valeur dans votre modèle twig à l'aide de la balise Session objet.

// 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'] %}

J'espère que cela vous aidera.

Regards,
Matt

36voto

user1279047 Points 323

Brindille de réglage

$twig = new Twig_Environment(...);    
$twig->addGlobal('session', $_SESSION);

Ensuite, dans votre modèle, accédez aux valeurs de session, par exemple

$_SESSION['username'] in php file Will be equivalent to {{ session.username }} in your twig template

22voto

Henry Points 115

Une astuce simple consiste à définir le tableau $_SESSION comme une variable globale. Pour cela, modifiez le fichier core.php dans le dossier d'extension en ajoutant cette fonction :

public function getGlobals() {
    return array(
        'session'   => $_SESSION,
    ) ;
}

Ensuite, vous pourrez accéder à n'importe quelle variable de session comme :

{{ session.username }}

si vous voulez accéder à

$_SESSION['username']

20voto

joan16v Points 161

La façon d'accéder à une variable de session dans Twig est la suivante :

{{ app.session.get('name_variable') }}

7voto

this.lau_ Points 23290

J'ai trouvé que la manière la plus propre de faire cela est de créer une TwigExtension personnalisée et de remplacer son getGlobals() méthode. Plutôt que d'utiliser $_SESSION il est également préférable d'utiliser l'option de Symfony Session puisqu'elle gère le démarrage/arrêt automatique de la session.

J'ai l'extension suivante dans /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';
    }
}

Ajoutez ensuite ceci /app/config/services.yml :

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension }

On peut ensuite accéder à la session à partir de n'importe quelle vue en utilisant :

{{ session.my_variable }}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X