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 :

Listener sur certaines routes [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut Listener sur certaines routes
    Bonjour à tous,

    Comme dit dans l'intitulé du message, je voudrai mettre en place un listener sur certaines routes.

    Il est bien sur possible dans le code du service de vérifier la route pour chaque requête la route mais ce n'est pas ce que je veux faire.

    Existe t-il un paramètre genre :
    comme pour les paramètres de sécurité qui permettrait de restreindre directement depuis la configuration du service les routes concernées par ce dernier et exclure toutes les autres ?

    Par avance merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Faut croire qu'il n'y a pas de solution de paramétrage à ce problème.

    J'ai donc adopté une solution d'exclusion des routes. Dans le service, j'injecte la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct(RequestStack $request)
    {
        $this -> request = $request -> getCurrentRequest();
    }
    Puis dans mon code je contrôle que la route n'est pas exclue en utilisant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($this -> excludeRoute($route)) return;
    Le code de la fonction :
    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
    /**
     * Contrôle que la route courante ne fait pas partie de celles à exclure
     * @param  [type] $route [description]
     * @return [type]        [description]
     */
    private function excludeRoute($route)
    {
        $exludeRoute = [
            'destination.create.pdf',
        ];
     
       if (in_array($route, $exludeRoute)) {
            return true;
       }
     
       return false;
    }
    Toutefois si d'aucun d'entre vous avait mieux, je prends.

  3. #3
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    Tu peux mettre un attribut sur les routes que tu veux inclure/exclure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my_route:
        resource: ...
        prefix: ...
        defaults: { param_exclude: true }
    Ensuite en faisant un listener qui écoute les évènements Symfony kernel.request ou kernel.controller (ou autre selon les besoins) tu as accès à la requête depuis le param de la méthode onKernelRequest, onKernelController etc. sans injecter quoique ce soit.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
     
        if (true === $request->attributes->get('param_exclude', false)) {
            return; // excluded route => do nothing
        }
     
        // do whatever you want...
    }
    En faisant comme ça le comportement que tu souhaites appliquer en fonction des routes est configuré au niveau ... des routes

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Bonsoir,

    Je pensais pas qu'il était possible et aussi simplement de définir un paramètre sur une route. Du coup oui cela correspond assez à ce que je cherchais.

    Je teste ça et reviens rapidement pour marquer le sujet comme résolu.

    Merci pour ton attention.

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

Discussions similaires

  1. [2.x] Htaccess avec authentification basique sur certaines routes
    Par hebus44 dans le forum Symfony
    Réponses: 2
    Dernier message: 06/02/2013, 09h52
  2. [2.x] Restreindre certains hôtes sur une route
    Par student_php dans le forum Symfony
    Réponses: 0
    Dernier message: 15/06/2012, 14h23
  3. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 11h28
  4. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 13h33
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14

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