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 :

Services / Injection argument dans un alias


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 16
    Points : 22
    Points
    22
    Par défaut Services / Injection argument dans un alias
    Bonjour,

    Je bloque sur l'utilisation des alias avec les services.

    En gros, j'ai 2 services de transports :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <service id="app.provider.mail" class="AppBundle\Provider\MailProvider">
    ....
    </service>
    <service id="app.provider.sms" class="AppBundle\Provider\SmsProvider">
    ....
    </service>
    J'ai plusieurs entités qui souhaitent utiliser un transport.
    Pour être générique, j'ai défini comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <service id="app.ENTTITY1.provider" alias "app.provider.mail" >
          <argument>AppBundle\Entity\Entity1</argument>
    </service>
    <service id="app.ENTTITY2.provider" alias "app.provider.sms" >
           <argument>AppBundle\Entity\Entity2</argument>
    </service>
    Questions :
    -> Comment utiliser l'argument (la classe entité) depuis le transport (exemple : AppBundle\Provider\SmsProvider) ?
    -> Comment définir l'injection de dépendance dans le constructeur de AppBundle\Provider\SmsProvider ? public function __construct(EntityRepository $entity) ?

    Merci pour vos retours

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bonjour,
    voila la doc ici , y ' a pas plus complet que lui.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2015
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Merci pour votre retour... J'ai déjà consulté la doc avant de poster le message...

    Merci bcp

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    déjà, utilise le YAML pour les config, parceque en XML c'est incompréhensible



    j'ai pas trop compris ce que tu voulais faire mais voici un exemple :

    AppBundle\services\Geocoder\UserGeocoder
    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
    36
    37
    38
     
    <?php
    namespace AppBundle\services\Geocoder;
     
    use Geocoder\Geocoder;
    use Geocoder\GeocoderInterface;
    use Geocoder\Provider\ProviderInterface;
    use Symfony\Component\HttpFoundation\Request;
     
     
    class UserGeocoder {
        protected $geocoder;
        protected $providers = [];
        protected $user_ip;
     
        public function __construct(Request $request, GeocoderInterface $geocoder)   {
            $this->geocoder = $geocoder;
     
            $this->user_ip = $request->getClientIp();
            if ($this->user_ip == '127.0.0.1') {
                $this->user_ip = '64.15.116.91';    // google.fr
            }        
        }
        public function addGeocoder(ProviderInterface $provider) {
            $this->providers[] = $provider;
        }
        public function getGeocoder() {		
            $res = null;
            foreach ($this->providers as $provider) {
                $this->geocoder->registerProvider($provider);
                $res = $this->geocoder->geocode($this->user_ip);       
                if ($res->getCounty()!=null)
                    break;
            }
     
            return $res;
        }
    }


    services.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        geocoder:
            class: AppBundle\services\Geocoder\Geocoder
            scope: request
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        user_geocoder:
            class: AppBundle\services\Geocoder\UserGeocoder
            scope: request
            arguments: [@request, @geocoder]
    tu peux remarquer que geocoder est injecté dans user_geocoder


    -----------------------------------------------------------------------------------------------------------------------------------


    avec cette exemple, tu pourras transposer avec ce que tu veux faire....


    tu peux remplacer geocoder par une entité: AppBundle/Entity/Bidule

    et le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
        public function __construct(Request $request, AppBundle/Entity/Bidule $bidule)   {
    ...

Discussions similaires

  1. [Web Services] pb injection entityManager dans un web service
    Par touirek dans le forum Spring
    Réponses: 2
    Dernier message: 17/12/2010, 00h58
  2. Saisie d'arguments dans la ligne de commande
    Par sangei dans le forum Général Java
    Réponses: 20
    Dernier message: 06/12/2009, 16h08
  3. [GWT+SPRING] Injection spring dans remote service
    Par Alwin dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 06/04/2009, 15h40
  4. [Struts] Passer un argument dans un property
    Par Malaussene dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/09/2004, 10h11
  5. [C#] Arguments dans Projet VS
    Par MALAGASY dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 07/07/2004, 15h32

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