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 :

formulaire de type choice avec les roles securité de symfony


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut formulaire de type choice avec les roles securité de symfony
    Salut à tous,

    Je cherche à mettre en place le formulaire de création d'utilisateur. Pour cela j'ai besoin de renseigner le role qu'aura mon nouvel utilisateur.
    J'aimerais donc avoir un champ de type select afin que l'admin puisse choisir un role parmis une liste (ecrit en dur pour le moment) de roles.

    Etant donné que le composant securité de Symfony se base sur un type array pour travailler avec les roles je dois faire avec.
    Ainsi comme l'option choice du formulaire se base sur un tableau de string je dois effectuer des conversions pour travailler avec mon form et l'entity User.

    J'ai donc une classe transformer afin de transformer dans les 2 sens (array -> string ou string -> array) les données du role pour l'entity ou la form.

    Néanmoins j'ai encore une erreur :
    ContextErrorException: Notice: Array to string conversion
    auriez-vous des pistes de recherche afin de mettre en place mon champ role du formulaire de création d'utilisateur ?


    création de mon champ dans la classe de mon form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            $builder->add($builder->create('roles','choice',array(
                'choices' => array('1' => 'ROLE_ADMIN','2' => 'ROLE_CONTRIB')
            ))->addViewTransformer($transformer));
    ma classe transformer :

    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
    use Symfony\Component\Form\DataTransformerInterface;
    use Symfony\Component\Form\Exception\TransformationFailedException;
     
    class StringToArrayTransformer implements DataTransformerInterface
    {
        public function transform($array)
        {
            var_dump($array);
            return $array[0];
        }
     
        public function reverseTransform($string)
        {
            return array($string);
        }
    }

    l'action de mon Controller :

    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
        public function addAction(Request $request)
        {
            $user = new User(); //init entity
            $form = $this->createForm(new UserForm(), $user);
     
            //update de l'objet si form soumis
            $form->handleRequest($request);
     
            //validation de l'objet
            if ($form->isValid())
            {
                $em = $this->getDoctrine()->getManager();
                $em->persist($form);
                $em->flush();
                return $this->redirect($this->generateUrl('task_success'));
            }
     
            return $this->render('MonBundle:Admin:usersAdd.html.twig', array('form' => $form->createView()));
        }
    PS : je sais qu'il existe FOSUserBundle mais je ne souhaite pas l'utiliser


    En vous remerciant de votre précieuse contribution.

  2. #2
    Membre confirmé Avatar de DarckCrystale
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Juin 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 71
    Par défaut
    Bonsoir,


    choices

    type: array default: array()

    C'est la façon la plus simple de spécifier les choix qui pourront être choisis dans le champ. L'option choices est un tableau, où les index sont les valeurs des items, et les valeurs du tableau sont les labels des items :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $builder->add('gender', 'choice', array(
        'choices' => array('m' => 'Masculin', 'f' => 'Féminin')
    ));
    http://symfony.com/fr/doc/current/re...e.html#choices

    Le $builder->create et le addViewTransformer sont-ils vraiment nécessaires ?

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    je te remercie DarckCrystale mais malheureusement cette simple solution est évidemment la première que j'ai testé et comme celle-ci ne marche évidemment pas je me suis renseigner sur les transformer pour combler le problème entre le champ array et le choice. Mais je n'arrive toujours pas à mes fins avec cela. d'ou ma question histoire de savoir ce qui cloche dans mon code.

    Bien entendu si j'enlève mon transformer en fin de construction et si je passe la valeur "multiple" à true cela me donnera un champ valide qui contient mes 2 items. Mais je ne souhaite avoir 1 item visible car je n'accepte pas plusieurs valeur pour ce champs mais uniquement un seul role. Donc je passe la valeur "multiple" à false cela ne marche plus.

  4. #4
    Membre confirmé Avatar de DarckCrystale
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Juin 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 71
    Par défaut
    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $builder->add(' { nom du champ pour le role dans l'objet utilisateur }', 'choice', array(
        'choices' => array('ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_CONTRIB' => 'ROLE_CONTRIB')
    ));
    ?

    Symfony ne va-t-il pas avec ça hydrater tout seul l'objet User ?

    Peut-être d'ailleurs l'erreur rencontrée vient-elle du setter de l'entité User qui râle ?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    en me basant sur les explications de ce lien j'obtiens une erreur :
    ContextErrorException: Notice: Undefined offset: 0

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $builder->add(' { nom du champ pour le role dans l'objet utilisateur }', 'choice', array(
        'choices' => array('ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_CONTRIB' => 'ROLE_CONTRIB')
    ));
    Parce que cela ne change pas grand chose à la problématique.

    Symfony ne va-t-il pas avec ça hydrater tout seul l'objet User ?
    si seulement...

    Peut-être d'ailleurs l'erreur rencontrée vient-elle du setter de l'entité User qui râle ?
    Je ne comprends pas bien pourquoi il rallerait puisque à aucun moment je set encore un objet user puisque mon formulaire n'est jamais soumis.
    De plus dans mes fixtures je set la valeur de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user1->setRoles(array('ROLE_ADMIN'));
    et je n'ai pas de problème. La récupération semble fonctionner également car mon authentification et mon autorisation marche bien quand il test le profil et son role.

  7. #7
    Membre confirmé Avatar de DarckCrystale
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Juin 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 71
    Par défaut
    Bonjour,

    Peut-être essayer de mettre un __toString() dans les entités qui interviennent dans le formulaire : si ça marche, on pourra voir quelle classe pose problème (ou ne pose pas problème, si ça plante toujours ^^' )

Discussions similaires

  1. Formulaire et champs selectionnés avec les sessions
    Par denzel21 dans le forum Langage
    Réponses: 1
    Dernier message: 14/12/2007, 12h19
  2. Réponses: 2
    Dernier message: 30/08/2004, 14h48
  3. [Débutant][Phppgadmin] problème avec les types
    Par PoY dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/08/2004, 17h06
  4. Pb avec le formulaire en type List
    Par LoulouFifi dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/02/2004, 11h34
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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