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 :

Enregistrement de nouvelles données pour un utilisateur


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Par défaut Enregistrement de nouvelles données pour un utilisateur
    Bonjour à tous !

    Me revoilà avec mes petits problèmes.

    Donc dans un premier temps, j'ai un utilisateur (héritant de FOSUserBundle). Mon utilisateur possède une civilité et une école.
    Pour cela j'ai fait :

    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
        public function buildForm(FormBuilder $builder, array $options)
        {
            parent::buildForm($builder, $options);
     
            $builder
                    // about yourself
                    ->add('firstname', 'text', array('attr' => array('placeholder' => 'First name')))
                    ->add('lastname', 'text', array('attr' => array('placeholder' => 'Last name')))
                    ->add('phone', 'text')
                    ->add('email', 'email')
                    ->add('civility', new CivilityType())
                    ->add('nationality', new NationalityType())
                    ->add('birthday', 'date')
     
                    // school
                    ->add('school', new SchoolType());
        }
    Pour la civilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('civility','entity', array( 
                                            'label' => 'Civility',
                                            'class' =>'monsite\\UserBundle\\Entity\\Civility',
                                            'property' => 'libel',
                                            'query_builder' => function(EntityRepository $er) 
                                            {  
                                                return $er->createQueryBuilder('c');
                                            }
                                            ));
        }
    mon twig :

    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
    39
    40
    {% extends "::base_menuleft_account.html.twig" %}
     
    {% block body %}
        <form action="{{ path('mon_site_user_me') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
     
            <div>Join Us !</div>
     
                <div class="#">
     
                        About yourself
     
                            {{ form_errors(form.firstname) }}
                            {{ form_widget(form.firstname) }}
     
                            {{ form_errors(form.lastname) }}
                            {{ form_widget(form.lastname) }}
     
                            {{ form_errors(form.phone) }}
                            {{ form_widget(form.phone) }}
     
                            {{ form_errors(form.email) }}
                            {{ form_widget(form.email) }}
     
                            {{ form_errors(form.civility) }}
                            {{ form_widget(form.civility) }}
     
                            {{ form_errors(form.nationality) }}
                            {{ form_widget(form.nationality) }}
     
                            {{ form_label(form.birthday) }}
                            {{ form_errors(form.birthday) }}
                            {{ form_widget(form.birthday) }}
     
     
                    {{ form_rest( form ) }}
                    <input type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}">
     
               </div>
        </form>
    {% endblock body %}
    ma route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mon_site_user_me:
        pattern:   /monBoard/Me
        defaults:  { _controller: monsiteUserBundle:monBoard:me }
    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
    20
    21
    22
    23
    24
        public function meAction()
        {
            if(!$this->get('security.context')->isGranted('ROLE_USER'))
            {
                throw new AccessDeniedHttpException('Accès limité aux auteurs');
            }
            else
            {
                $userManager = $this->get('fos_user.user_manager');
                $userCurrent = $this->container->get('security.context')->getToken()->getUser();
                $user = $userManager->findUserBy(array('username' => $userCurrent));
     
                $form = $this->createForm(new UserType($this->getDoctrine()->getEntityManager()), $user);
                $formHandler = new UserHandler($form, 
                                               $this->get('request'), 
                                               $this->getDoctrine()->getEntityManager());
                var_dump($user);
                if($formHandler->process())
                {
                    return $this->redirect( $this->generateUrl('mon_site_user_me', array('id' => $user->getId())) );
                }
                return $this->render('monsiteUserBundle:monBoard:me.html.twig', array('form' => $form->createView()));
            }
        }
    Mon erreur :

    Neither property "civility" nor method "getCivility()" nor method "isCivility()" exists in class "monsite\UserBundle\Entity\Civility"

    Je ne comprends pas très bien pourquoi il fait un getCivility dans la classe civility ! Qu'est ce que je fais de mal ?

    Merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    je crois que ton soucis vient de monsite\UserBundle\Entity\Civility.php. fais nous voir ce fichier.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    je crois que ton soucis vient de monsite\UserBundle\Entity\Civility.php. fais nous voir ce fichier.
    Je ne vois pas pourquoi ça viendrait de là. En fait il me demande un getCivility DANS la table civility, ce que je trouve idiot, non ? Se serait quoi la définition de cette méthode getCivility : {return $this;} ?
    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
    39
    40
    41
    42
    <?php
     
    namespace monsite\UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * monsite\UserBundle\Entity\Civility
     *
     * @ORM\Table(name="civility")
     * @ORM\Entity
     */
    class Civility
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
     
        /**
         * @var string $libel
         *
         * @ORM\Column(name="libel", type="string", length=255, nullable=true)
         */
        private $libel;
     
     
        public function getLibel()
        {
            return $this->libel;
        }
     
        public function setLibel($libel)
        {
            $this->libel = $libel;
        }    
     
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Par défaut
    Le problème viens probablement de ta classe User.
    Symfony2 a besoin de pouvoir accéder aux propriétés soit directement si ils sont public soit au moyens de méthode avec des prefixes comme "get", "set"[, "is" (plus pour les type boolean), ....]
    Vérifie que ces méthodes sont bien présentes et sinon implémente les

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Par défaut
    Citation Envoyé par Teudjy Voir le message
    Le problème viens probablement de ta classe User.
    Symfony2 a besoin de pouvoir accéder aux propriétés soit directement si ils sont public soit au moyens de méthode avec des prefixes comme "get", "set"[, "is" (plus pour les type boolean), ....]
    Vérifie que ces méthodes sont bien présentes et sinon implémente les
    Déjà fait, dans la table user :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public function getCivility()
        {
            return $this->civility;
        }
     
        public function setCivility(Civility $civility)
        {
            $this->civility = $civility;
        }

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Par défaut
    Autant pour moi ^^

    Maintenant dans ton type Civility, au lieu de mettre les options du champ dans la méthode buildForm, met les dans la méthode getDefaultOptions comme suit :

    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
     
    class CivilityType extends AbstractType {
     
        public function getDefaultOptions(array $options) {
            return array(
                'label' => 'Civility',
                'property' => 'libel',
                'class' => 'UserBundle:Fuel',
                'query_builder' => function(EntityRepository $er) 
                                            {  
                                                return $er->createQueryBuilder('c');
                                            },
            );
        }
     
        public function getParent(array $options) {
            return 'entity';
        }
     
        public function getName() {
            return 'civility';
        }
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2015, 01h38
  2. Réponses: 0
    Dernier message: 14/08/2013, 15h29
  3. Chargement des données pour un utilisateur précis
    Par Lipolipo dans le forum W4 Express
    Réponses: 4
    Dernier message: 08/05/2012, 15h54
  4. interdire acces base donnée pour un utilisateur reseau
    Par jalalnet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 15/03/2012, 16h17
  5. [PHPMyAdmin] Accès base de donnée pour utilisateur
    Par nicodeme dans le forum Outils
    Réponses: 2
    Dernier message: 04/03/2006, 01h10

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