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 :

Service, Bundle et configuration [2.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Service, Bundle et configuration
    Bonjour,

    Je viens de créer un service qui sera utilisé par plusieurs de mes bundles.
    Ce service possède des paramètres, par exemple un paramètre 'db_name' qui possèdent une valeure par défaut. Cette valeur par défauts est renseignée dans un fichier /app/config/*.yml

    Les bundles utilisant ce service peuvent redéfinir le paramètre 'db_name'.

    J'ai réalisé une classe d'extension pour mon service, avec la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public function load(array $configs, ContainerBuilder $container) {}
    Lorsque j'appelle mon service dans un de mes bundle et que j'espionne la variable $configs, celle-ci est bien un tableau avec x entrées, où x correspond au nombre de bundles qui redéfinissent la variable "db_name" utilisée par le service.
    Mais bien sûr, c'est le dernier bundle déclaré dans appKernel qui va alors fixer la valeur de "db_name".


    Ma question est : comment faire pour que le bundle courant puisse redéfinir la variable "db_name" du service?!

    Faut il passer par une classe "Configuration", ou bien un CompilerPass?

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $service = $this->get('ton_service');
    $service->setDbName($ta_valeur);
    ?

    Pourquoi vouloir le faire de facon automatique ? C'est pas possible, et ca serait pas tres propre.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je souhaitais pouvoir faire le 'setDbName' à partir de la config pour épargner cela au client utilisant le service.
    Pourquoi est-ce que cela ne serait pas très propre selon toi?

    Après pas mal d'heures de recherches je ne sais pas trop si cela est possible. Mais j'avoue ne pas avoir bien saisi encore le fonctionnement du 'TreeBuilder' que l'on place dans la classe Configuration. En sais tu plus à propos de cette partie?

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    C'est pas propre parce que ton service essaie de "deviner" une valeur de config selon le contexte. Je crois que c'est un des trucs les plus moches qui soit

    De plus, un service est une instance supérieure. C'est à dire qu'il est commun a tous les bundles, et part commun j'entends vraiment "C'est exactement le même partout". Si ton service enregistre des trucs dans des bases différentes suivant le bundle qui l'appelle, c'est en fait que tu as besoin de plusieurs services : 1 service par bundle. Chaque service enregistre dans la bonne base, mais il enregistre toujours dans cette base la.

    Donc tu as deux solutions :

    * Soit tu gardes un seul service, mais le nom de la base doit être en argument de chaque méthode (oui car imagine qu'un bundle change de base, ensuite un autre bundle arrive et rechange la base puis enregistre qqch. Ensuite, ton 1er bundle veut enregister qqch mqis du coup ne rechange pas de base et enregistre au mauvais endroid !)

    * Soit tu fais 1 service / bundle. Bien sur tous les services héritent d'une seule classe ou autre pour mettre en commun ce qui est en commun.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je crois que je me suis emporté et que mes lectures m'ont faites zapper le fait qu'un service est commun à tout le monde et non pas propre à chaque bundle qui l'appelle.
    Ce qui fait qu'avec mon principe les propriétés du service auraient été renseignées avec le dernier bundle ayant effectué l'appel et que les bundles ayant effectué des appels avant auraient été bernés! C'est bien cela n'est-ce pas.

    et merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je réouvre le sujet

    Regarde la config de doctrine. Tu verra que tu peux ajouter plusieurs connexions, avec des noms différents.
    Tu peux t'en inspirer.

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

Discussions similaires

  1. [WS 2008 R2] Service is now configured to use a built-in windows account
    Par agdid04 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 29/01/2015, 17h21
  2. [2.x] Explication : Bundle, Service et Configuration
    Par rebolon dans le forum Symfony
    Réponses: 2
    Dernier message: 17/11/2011, 11h21
  3. Détecter des services (Bundle) avec appli Android
    Par superkiller dans le forum Android
    Réponses: 0
    Dernier message: 01/03/2010, 19h16
  4. [IE 8] Service Web HTTP - Configuration - Pb Connexion
    Par lorang dans le forum IE
    Réponses: 0
    Dernier message: 16/01/2010, 21h33
  5. Réponses: 0
    Dernier message: 01/09/2009, 15h25

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