php - reusable - twig starts




Accesso alla sessione dal modello TWIG (4)

Ho cercato molto sulla rete come accedere all'array $_SESSION globale dal modello {{app.session.get('index')}} trovato questo: {{app.session.get('index')}} , ma quando lo chiamo, restituisce un stringa vuota. Ho $_SESSION['filter']['accounts'] e ho {{app.session.get('filter').accounts}} questo errore quando ho chiamato {{app.session.get('filter').accounts}} : Item "accounts" for "" does not exist Cosa sto facendo di sbagliato?


Ho trovato che il modo più semplice per farlo è quello di creare una TwigExtension personalizzata e sovrascrivere il suo metodo getGlobals() . Piuttosto che usare $_SESSION , è anche meglio usare la classe Session di Symfony poiché gestisce automaticamente l'avvio / l'arresto della sessione.

Ho la seguente estensione in /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';
    }
}

Quindi aggiungilo in /app/config/services.yml :

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

Quindi è possibile accedere alla sessione da qualsiasi vista utilizzando:

{{ session.my_variable }}

Il modo per accedere a una variabile di sessione in Twig è:

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

Ramoscello di installazione

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

Quindi, all'interno del modello, ad esempio, i valori della sessione di accesso

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

Un semplice trucco consiste nel definire l'array $ _SESSION come variabile globale. Per questo, modifica il file core.php nella cartella dell'estensione aggiungendo questa funzione:

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

Quindi, sarai in grado di accedere a qualsiasi variabile di sessione come:

{{ session.username }}

se si desidera accedere a

$_SESSION['username']






twig