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 :

Injection d'un service dans une classe n'héritant pas de Controller [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut Injection d'un service dans une classe n'héritant pas de Controller
    bonjour
    quand on écrit un controller qui hérite de la classe
    Controller, on a une méthode rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->container->get('nom_du_service');
    Mais comment fait on si on écrit une classe qui n'hérite pas de Controller?

    D'après l'API on implémente ContainerAwareInterface?

  2. #2
    Membre Expert 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 : 37
    Localisation : France

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

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

    Les controllers qui étendent des Controllers de base de Symfony implémentent l'interface ContainerAware, et possèdent donc en attribut le container de service, ce qui permet d'accéder un service en faisant un $this->get('mon.service');.

    On peut se passer du container en injectant les services directement au contrôleur à condition que celui-ci soit lui même un service. En déclarant ton contrôleur en tant que service tu peux lui injecter directement les services dans la configuration du service contrôleur.

    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
    use Path\To\MyService;
    use Path\To\MyOtherService;
     
    class MyController
    {
        private $myService;
        private $myOtherService
     
        public function __construct(MyService $myService, MyOtherService $myOtherService)
        {
            $this->myService = $myService;
            $this->myOtherService = $myOtherService;
        }
     
        public function indexAction()
        {
            // $this->get('my.service')->getData(); Ancienne méthode utilisant le container
            $this->myService->getData(); // Nouvelle méthode utilisant l'injection de dépendances
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my.controller:
        class: "Path/To/My/Controller/Class"
        arguments:
            - @my.service
            - @my.other.service
     
    my.service:
        class: "Path/To/My/Service/Class"
     
    my.other.service:
        class: "Path/To/My/Other/Service/Class"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    ok merci on est quand même obligé de passer par le fichier de config?

  4. #4
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Oui, que ce soit en yml, en xml ou en php, tu dois configurer ton injection de dépendance dans un fichier de configuration.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    Ou en annotation avec JMSDiExtraBundle

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    ok merci à vous !

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

Discussions similaires

  1. [2.x] [2.3] Injecter un service dans une classe
    Par Storke dans le forum Symfony
    Réponses: 3
    Dernier message: 22/11/2013, 17h01
  2. Utiliser AsyncTask dans une classe de Service ?
    Par bza88 dans le forum Android
    Réponses: 1
    Dernier message: 28/05/2013, 01h15
  3. [Débutant] integrer des methodes (implémentées dans une classe cs) a un web service
    Par mimi-imene-91 dans le forum Services Web
    Réponses: 0
    Dernier message: 29/11/2012, 14h28
  4. Web Service dans une bibliothèque de classe
    Par Mar1.NET dans le forum Services Web
    Réponses: 1
    Dernier message: 07/09/2012, 12h26
  5. [Framework] Injecter un fichier properties dans une classe de constante
    Par Slyders dans le forum Spring
    Réponses: 0
    Dernier message: 25/03/2010, 17h10

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