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 ?
Réponses
Trop de publicités?{{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
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']
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 }}
- Réponses précédentes
- Plus de réponses