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 :

Héritage de Controller, bloquage de traitement [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 25
    Par défaut Héritage de Controller, bloquage de traitement
    Bonjour, je me suis mis depuis peu à Symfony2 et j'aurais une question par rapport aux Controller. Je vous explique le principe.

    Je possède deux Controller A et B qui nécessitent que l'utilisateur soit connecté avant d'exécuter n'importe quelle méthodeAction.
    Ce que j'aimerais, c'est que A et B héritent d'un controller X qui vérifie si l'user est connecté et si ce n'est pas le cas, qu'il bloque l'exécution et donc que les méthodes appelées (de A ou B) ne s'exécutent pas.

    Pour le moment, voici un exemple de ce que j'ai.

    Classe Mère : X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class ConnectController extends Controller
    {
     
        public function isConnected()
        {
        	return ($this->get('session')->get('user_id') != null);
        }
     
        public function renderNoConnect()
        {
        	return $this->render('template_pour_connexion');
        }
     
    }
    Exemple classe fille : A ou B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class AController extends ConnectController
    {
     
        public function indexAction()
        {
        	if(!parent::isConnected())
        		return parent::renderNoConnect();
     
            return $this->render('templateA');
        }
    }

    Ici, si l'user n'est pas connecté lors de l'appel de la méthode index de AController, la template pour la connexion va s'afficher. Ce code est pas mal redondant puisqu'il va falloir copier/coller la condition dans toute les méthodes du controller A ...

    J'ai essayé quelques tricks avec _call(), mais sans succès.
    Si certain on des idées, je suis preneur, merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Le système natif de sécurisation permet déjà de faire tout cela.
    http://symfony.com/doc/current/book/security.html

    pourquoi ne pas l'utiliser ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 25
    Par défaut
    Merci, c'est ce dont j'avais besoin, mais je ne comprend pas tout.
    Par exemple, comment restreindre l'accès à une route uniquement si l'utilisateur est connecté.
    J'entend par là que je dois faire la liaison entre security.yml et ma session('user_id').

    Ça ressemblerais à quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    firewalls:
        zone_protected:
            pattern:    ^/(zone1|zone2|zone3)$
            form_login: /connexion
    Donc si j'ai bien compris, lorsqu'on arrive sur une route zone1 ou zone2 ou zone3, on va être redirigé vers /connexion.
    Mais ce que je voudrais, c'est dire à quelles condition on redirige. Et cette condition, c'est user_id=null

    J'espère être assez clair

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 25
    Par défaut
    En fait je ne vois pas comment ça peut être automatique puisque la création de session('user_id') n'est pas produit par symfony.
    J'aurais très bien pu appeler ma variable session autrement.
    La doc fournie trop d'info, je suis noyé dans les Roles etc, ce que je veux est au final assez simple, mais je vois vraiment pas comment ça fonctionne.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    bien sur que si que t'as la session, récupère le Token

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->container->get('security.context')->getToken()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 03/02/2012, 12h06
  2. héritage de Control et Concepteur graphique de VS
    Par juniorAl dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/03/2009, 11h17
  3. Héritage User Control
    Par Guy025 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/08/2008, 21h45
  4. [XAML] Héritage de controle
    Par anthyme dans le forum Silverlight
    Réponses: 8
    Dernier message: 07/05/2008, 15h06
  5. héritage user control
    Par salihovic dans le forum Windows Forms
    Réponses: 13
    Dernier message: 05/12/2007, 12h45

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