IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Variable de session


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut Variable de session
    Bonjour,

    J'utilise une variable de session ($_SESSION['remote_user']) pour stocker le nom de l'utilisateur, le soucis c'est que je n'arrive pas à afficher dans un template twig la valeur de la variable.

    Je fais un {{ app.session.get('remote_user') }} dans layout.html.twig qui se situe dans le dossier app.

    J'ai chercher sur google mais à chaque fois les personnes l'utilisent dans les controleurs.. je voudrais une variable globale..

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Bonjour,

    Comment la stocke tu ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Je la stocke dans le fichier app.php dans le dossier web.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['remote_user'] = $_SERVER['REMOTE_USER'];

  4. #4
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Si c'est pas indiscret, tu cherches à faire quoi ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    A Afficher le login de l'utilisateur windows sur le site, je récupère le nom correctement mais j'arrive pas à l'afficher

  6. #6
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Il faut en dire un peu plus. Via quel propriété ? Est ce après une authentification ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Comment sa en dire plus ?

    J'ai initialisé une variable de session dans :

    C:/wamp/www/Site/web/app.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (!isset($_SESSION['REMOTE_USER']))
    	$_SESSION['REMOTE_USER'] = $_SERVER['REMOTE_USER'];
     
    $ldap = new Ldap();
     
    $ldap->authenticate($_SESSION['REMOTE_USER']);
     
    $_SESSION['user_current'] = $ldap = $ldap->getFirst('cn');
    J'ai rajouter des fichiers que j'ai créer pour pouvoir utiliser Ldap.

    Maintenant j'ai une variable de session dans mon app.php.

    J'ai mon template global (layout) dans :

    C:/wamp/www/Site/app/Ressources/views/layout.html.twig

    C'est la ou j'affiche la partie extérieur du site (header, menu, footer)

    et dans la partie menu je voudrais afficher la variable de session que j'ai initialisé pour pouvoir le voir sur toute les page de mon site.

    Je ne peux pas faire autrement pour la variable de session je veux juste savoir comment l'afficher, je ne trouve pas dans la doc de symfony.

    Merci.

  8. #8
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Je pense que ta variable de session doit être écrasé par le système de session de Symfony2

    Toutefois afin de faire un test en mode debug, mets ton bout de code dans le fichier app_dev.php

    Tu as accès au globale dans la debug tool bar.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Normalement non mais on peut toujours regarder,

    le soucis c'est que je n'arrive pas à aller dans le mode dev..

    comment on fait ??

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    En faite escuse moi je suis en mode dev (j'ai trouvé)

    Dans Request Server Parameters
    J'ai mon champ REMOTE_USER qui est bon.

    Mais il n'y a rien dans session :

    Session Attributes
    No session attributes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    use Symfony\Bundle\FrameworkBundle\Controller\Ldap;
    use Symfony\Bundle\FrameworkBundle\Controller\Http;
    use Symfony\Component\ClassLoader\ApcClassLoader;
    use Symfony\Component\HttpFoundation\Request;
     
    $loader = require_once __DIR__.'/../app/bootstrap.php.cache';
     
    // Use APC for autoloading to improve performance
    // Change 'sf2' by the prefix you want in order to prevent key conflict with another application
    /*
    $loader = new ApcClassLoader('sf2', $loader);
    $loader->register(true);
    */
     
    if (!isset($_SESSION['REMOTE_USER']))
    	$_SESSION['REMOTE_USER'] = $_SERVER['REMOTE_USER'];
     
    $ldap = new Ldap();
     
    $ldap->authenticate($_SESSION['REMOTE_USER']);
     
    $_SESSION['user_current'] = $ldap = $ldap->getFirst('cn');
     
    require_once __DIR__.'/../app/AppKernel.php';
    //require_once __DIR__.'/../app/AppCache.php';
     
    $kernel = new AppKernel('prod', true);
    $kernel->loadClassCache();
    //$kernel = new AppCache($kernel);
    $request = Request::createFromGlobals();
    $response = $kernel->handle($request);
    $response->send();
    $kernel->terminate($request, $response);

  11. #11
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Tu es donc en authentification http, je pense.

    Je cherches à savoir ou tu veux en venir exactement. Je ne suis pas sur qu'attaqué le fichier app.php soit la bonne solution.

    Si tu fais un var_dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ldap = new Ldap();
     
    $ldap->authenticate($_SESSION['REMOTE_USER']);
     
    $_SESSION['user_current'] = $ldap = $ldap->getFirst('cn');
    var_dump($_SESSION['user_current']);
    Est ce que ta variable est bien initialisé ?

    Mais je pense que Symfony écrase ta session pour avoir sa propre session.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Désolé pour le retard, je pouvais pas tester avant.

    Donc j'ai fait le var_dump
    et j'ai bien ma variable dedans:

    string 'utilisateurtest' (length=15)

  13. #13
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    Bonjour,
    Je n'ai pas trop approfondi cet aspect des développements avec Symfony mais il me semble qu'utiliser directement les variables de session ne soit pas tellement dans l'esprit du framework.
    Symfony propose des objets qui encapsulent toutes ces données et beaucoup d'autres.
    Par exemple, dans un contrôleur, on peut obtenir des données du serveur en passant par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->getRequest()->server->get('REMOTE_ADDR');
    Pour ce qui concerne la session, il est possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            $session = $this->getRequest()->getSession();
            $session->set('TOTO','toto');
            $toto = $session->get('TOTO');
    Il est ensuite possible de passer ça au twig par la méthode classique (toujours dans le contrôleur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public function indexAction()
        {
            $session = $this->getRequest()->getSession();
            return $this->render('AcmeMyBundle:Default:index.html.twig', 
                      array('session' => print_r($session,true)));
        }
    Et de le récupérer dans le twig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Hello !
    <pre>
    Session
    {{ session }}
    </pre>

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Merci pour ta réponse,

    Je ne peux pas le passer dans un controller car si l'utilisateur arrive sur une autre page (n'importe laquelle sauf l'index) sa ne marchera pas..

    C'est pour cela que je suis obliger de passer par là, sinon je dois mettre les lignes que tu a mis dans chaque controller et dans chaque méthode..

    C'est impossible de récupérer cette ***** variable ??

    les session sont déclaré à quel niveau dans symfony ??

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Sinon j'ai une autre question,

    est-ce qu'il y a un controller global ?? comme la vue global mais en controller ? ^^

    parce que la sa serait super !

  16. #16
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    Là, je ne vois pas trop le problème.
    De toute façon, tu es bien obligé de passer le paramètre à twig (je ne crois pas que tu puisses définir une variable globale accessible depuis twig sans la passer).
    Tu peux donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public function indexAction()
        {
            return $this->render('AcmeMyBundle:Default:index.html.twig', 
                      array('session' => print_r($this->getRequest()->getSession(),true)));
        }
    Et tu n'as plus la ligne d'affectation de la variable.

    Sinon, pour faire un super contrôleur, je ferais un contrôleur (qui hérite du contrôleur habituel de symfony) quelque part et ensuite, je ferais hériter tous mes contrôleurs de ce méta-controleur et le tour est joué.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Ah ! sa m'intéresse le truc du super controller, est-ce que tu connais un tuto ou de la doc la dessus stp ?

  18. #18
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    Non, je ne connais pas de tuto... Et je ne l'ai jamais fait. Mais je pense que tu peux y arriver en définissant un constructeur pour y mettre ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    namespace Acme\MyBundle\MetaController;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
     
    class MetaController extends Controller
    {
        public function __construct()
        {
             $this->session = $this->getRequest()->getSession();
        }
    Ensuite, tu fais hériter tes contrôleurs de ton méta controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    namespace Acme\MyBundle\Controller;
     
    use Acme\MyBundle\MetaController;
     
    class DefaultController extends MetaController
    {
        public function indexAction()
        {
            return $this->render('AcmeMyBundle:Default:index.html.twig', 
                      array('session' => print_r($this->session,true)));
        }
    Je pense que ça devrait marcher.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    Il ne trouve pas MetaController.php..

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Par défaut
    C:\wamp\www\MeteoApplis\src\MeteoApplis\AccueilBundle\Controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    
    namespace MeteoApplis\AccueilBundle\Controller; //Controller et non pas MetaController
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    
    class MetaController extends Controller
    {
        public function __construct()
        {
    		$this->session = $this->getRequest()->getSession();
    		//$session->set('TOTO', 'toto');
        }
    }
    C:\wamp\www\MeteoApplis\src\MeteoApplis\AccueilBundle\Controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    
    namespace MeteoApplis\AccueilBundle\Controller;
    
    use MeteoApplis\AccueilBundle\Controller\MetaController;
    
    class AccueilController extends MetaController
    {
        public function indexAction()
        {
    		$date = date("d/m/Y");
    		
            return $this->render('MeteoApplisAccueilBundle:Accueil:index.html.twig', array(
    			'date' => $date,
                                          'session' => print_r($this->session,true),
    		));
        }
    }
    Fatal error: Class 'MeteoApplis\AccueilBundle\MetaController' not found in C:\wamp\www\MeteoApplis\src\MeteoApplis\AccueilBundle\Controller\AccueilController.php on line 8

    J'ai modifier mon message, maintenant il a trouver j'ai mis les modifications en rouge.

    J'ai une autre erreur du coup

    Fatal error: Call to a member function get() on a non-object in C:\wamp\www\MeteoApplis\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.php on line 179

Discussions similaires

  1. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  2. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo