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 :

argument de service pour un formType


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 16
    Points
    16
    Par défaut argument de service pour un formType
    Bonjour,

    je suis confrontée à un problème lié à l'utilisation des services depuis un formType de fosuser déclarée en tant que service:.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        fos_user.profile.form.type:
            arguments: [%fos_user.model.user.class%]
            class: Acme\UserBundle\Form\Type\ProfileFormType
            tags:
                - { name: form.type, alias: acme_user_profile }
    En fait j'aimerai depuis mon formType utilisez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $roles = $this->container->getParameter('security.role_hierarchy.roles');
    mais ça marche pas.J'ai vu qu'on pouvait passé en paramètre le containeur via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @service_container
    j'ai essayé ça fonctionne
    mais j'aimerai passé en paramètre juste le service de "security.role_hierarchy.roles", mais je n'ai pas trouvé comment faire.
    Auriez-vous une solution?

    merci

  2. #2
    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
    Hello,

    Ca fonctionne exactement de la même façon que le container.
    Tu as deux manières d'injecter un service dans un autre :

    Par argument (on récupère le service dans le constructeur)
    Par call : on déclare un setter dans la classe qui va définir la valeur de l'argument correspondant à ton service

    Exemple :
    Ici on va injecter le service security.context en argument directement dans le constructeur et un autre service perso par call
    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
    <?php
     
    use path\to\MyManager;
    use Symfony\Component\Security\Core\SecurityContext;
     
    class MyFormType 
    {
     
        protected $securityContext;
     
        protected $myManager;
     
        public function __construct(SecurityContextInterface $securityContext)
        {
            $this->securityContext = $securityContext;
        }
     
        public function setMyManager(MyManager $myManager)
        {
            $this->myManager = $myManager;
        }
    }
    La déclaration des services donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my.form.type:
        class: %my.form.type.class%
        arguments:
            - "@security.context"
        calls:
            - [ setMyManager,  [ "@my.manager" ] ]
     
    my.manager:
        class: %my.manager.class%
        #...
    C'est effectivement plus élégant de n'injecter que les services dont on a besoin plutôt que le container de service tout entier qui masque les dépendances.
    ++

Discussions similaires

  1. [installation] creer un service pour une bdd
    Par Chafaq dans le forum Oracle
    Réponses: 1
    Dernier message: 25/01/2006, 13h31
  2. [WD9] Service pour port série
    Par y0p dans le forum WinDev
    Réponses: 3
    Dernier message: 11/01/2006, 14h58
  3. [VB.NET] NT AUTHORITY\NETWORK SERVICE pour connection SQL
    Par Immobilis dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/01/2006, 22h49
  4. [10g] 2 services pour 1 instance
    Par matana dans le forum Oracle
    Réponses: 4
    Dernier message: 21/09/2005, 16h10
  5. Réponses: 4
    Dernier message: 12/09/2003, 12h38

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