Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony3] Erreur Lors de l'inscription

Passage d'attribut null

Sujet résolu
    15 octobre 2018 à 11:46:14

    Bonjour,

    Je travaille sur un annuaire des écoles. Lors de l'inscription d'un élève dans une école parmi plusieurs L'id de l’école a laquelle il est inscrit se passe null. 

    Une relation OneToOne entre L'entité école et éléve

    Dans l'entité Eleve.php:

     /**
         *@ORM\OneToOne(targetEntity="AppBundle\Entity\Ecole", inversedBy="eleve", cascade={"all"})
         */
        private $ecole;

    Dans l'entité Ecole.php:

     /**
         * @ORM\OneToOne(targetEntity="AppBundle\Entity\Eleve", mappedBy="ecole")
         */
        private $eleve;




    J'ai besoin vivement de votre aide. Merci d'avance

    L'erreur affiché:

    La table élève:

    Le fichier inscriptionEleveController.php 

    <?php
    
    namespace AppBundle\Controller\FrontOffice;
    
    use AppBundle\Entity\Ecole;
    use AppBundle\Entity\Eleve;
    use AppBundle\Form\InscriptionEleveType;
    //use Symfony\Component\HttpKernel\Tests\Controller;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
    
    
    
    
    /**
     * Class InscriptionEleveController
     * @package AppBundle\Controller\FrontOffice
     * @Route("inscriptionEleve")
     */
    class InscriptionEleveController extends Controller
    {
    /**
     * @Route("/eleve/ecole/{id}", name="front_inscription_eleve")
     * @Method("POST")
     */
    public function inscriptionAction(Request $request, Ecole $ecole)
    {
        $eleve = new Eleve();
        $form = $this->createForm(InscriptionEleveType::class, $eleve);
        $form->handleRequest($request);
    //    $infoArray['id']=$eleve->getEcole() ? $eleve->getEcole()->getId():null;
        $em = $this->getDoctrine()->getManager();
    
        if ($form->isSubmitted() ) {
            $eleve->getUtilisateur()->setEnabled(false);
            $em->persist($eleve);
            $em->flush();
    
            return $this->redirectToRoute('frontend_inscription_eleve_confirm', array(
                'id'=>$eleve->getEcole()->getId()
            ));
    
        }
        return $this->render('frontOffice\Inscription\eleve.html.twig', array(
            'form' => $form->createView(),
            'ecole'=>$ecole,
            'eleve'=>$eleve
        ));
    }
        /**
         * @Route("/eleve/confirmation",name="frontend_inscription_eleve_confirm")
         */
        public function confirmationAction()
        {
            return $this->render('frontOffice\Inscription\confirmation.html.twig');
        }
    }

    Le fichier Eleve.html.twig

    {% extends 'fos/layoutEleve.html.twig' %}
    {% trans_default_domain 'FOSUserBundle' %}
    {% block content %}
        <div class="container">
            <div class="card card-register mx-auto mt-0">
                {#<div class="card-header text-center">Inscription Eleve</div>#}
                <div class="card-body">
                    {{ form_start(form, {'method': 'post', 'action': path('front_inscription_eleve',{'id':ecole.id}), 'attr': {'class': 'fos_user_registration_register'}}) }}
                    <div class="form-group ">
                        <div class="form-row col-lg-8">
                            <div class="col-lg-3">
                                <label for="exampleInputName">Nom</label>
                                {{ form_widget(form.nom, {'attr': {'class': 'form-control','placeholder': 'Nom'}}) }}
                                <span class="text-danger">{{ form_errors(form.nom) }}</span>
                            </div>
                            <div class="col-lg-3">
                                <label for="exampleInputLastName">Prénom</label>
                                {{ form_widget(form.prenom, {'attr': {'class': 'form-control','placeholder': 'Prénom'}}) }}
                                <span class="text-danger">{{ form_errors(form.prenom) }}</span>
                            </div>
                        </div>
                            <br><br>
                            <div class="form-group col-lg-6">
                            <div class="col-lg-3">
                                <label for="exampleInputLastName">Nationalité</label>
                                {{ form_widget(form.nationalite, {'attr': {'class': 'form-control'}}) }}
                                <span class="text-danger">{{ form_errors(form.nationalite) }}</span>
                            </div>
                            <br>
                            <div class="col-lg-3">
                                <label for="exampleInputLastName">Ville</label>
                                {{ form_widget(form.ville, {'attr': {'class': 'form-control','placeholder': 'Votre ville'}}) }}
                                <span class="text-danger">{{ form_errors(form.ville) }}</span>
                            </div>
                            &nbsp;&nbsp;&nbsp;
                            <div class="col-lg-3">
                                <label for="exampleInputLastName">Code Postale</label>
                                {{ form_widget(form.codePostale, {'attr': {'class': 'form-control','placeholder': 'Votre Code Postale'}}) }}
                                <span class="text-danger">{{ form_errors(form.codePostale) }}</span>
                            </div>
                            <div class=" col-lg-3">
                                <label for="exampleInputLastName">Adresse</label>
                                {{ form_widget(form.adresse, {'attr': {'class': 'form-control','placeholder': 'Adresse'}}) }}
                                <span class="text-danger">{{ form_errors(form.adresse) }}</span>
                            </div>
                            </div>
                        <div class="col-lg-3">
                                <label for="exampleInputLastName">Numéro Téléphone</label>
                                {{ form_widget(form.numTel, {'attr': {'class': 'form-control','placeholder': 'Téléphone'}}) }}
                                <span class="text-danger">{{ form_errors(form.numTel) }}</span>
                            </div>
                        </div>
                </div>
                        <br>
                        <div class="col-lg-3">
                            <label for="exampleInputLastName">Date de naissance</label>
                            {{ form_widget(form.dateNaissance, {'attr': {'class': 'form-control'}}) }}
                            <span class="text-danger">{{ form_errors(form.dateNaissance) }}</span>
                        </div>
    
                        <div class="col-lg-3">
                            <label for="exampleInputLastName">Sexe</label>
                            {{ form_widget(form.sexe, {'attr': {'class': 'form-control'}}) }}
                            <span class="text-danger">{{ form_errors(form.sexe) }}</span>
                        </div>
    
    
                    </div>
                </div>
                <div class="form-group">
                    <label for="exampleInputEmail1">Email </label>
                    {{ form_widget(form.utilisateur.email, {'attr': {'class': 'form-control','placeholder': 'Email'}}) }}            </div>
                <div class="form-group">
                    <div class="form-row">
                        <div class="col-md-6">
                            <label for="exampleInputPassword1">Password</label>
                            {{ form_widget(form.utilisateur.plainPassword.first, {'attr': {'class': 'form-control','placeholder': 'form.password'|trans}}) }}                    </div>
                        <span class="text-danger">{{ form_widget(form.utilisateur.plainPassword.first) }}</span>
                        <div class="col-md-6">
                            <label for="exampleConfirmPassword">Confirmer votre mot de passe</label>
                            {{ form_widget(form.utilisateur.plainPassword.second, {'attr':{'class':'form-control','placeholder':'form.password_confirmation'|trans}}) }}
                            <span class="text-danger">{{ form_widget(form.utilisateur.plainPassword.second) }}</span>
                        </div>
                    </div><br>
                </div>
                <br>
                <div class="text-center">
                <input class="btn btn-warning ms-btn-m " type="submit" value="{{ 'registration.submit'|trans }}" />
                </div>
                </form>
                <div class="text-center">
                    <a class="d-block small mt-3" href="{{ path('fos_user_security_login') }}">Retour au connexion</a>
                    {#<a class="d-block small" href="forgot-password.html">Forgot Password?</a>#}
                </div>
                {{ form_end(form) }}
    
            </div>
        </div>
        </div>
    {% endblock content %}
    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2018 à 17:24:27

      Bonjour,

      Il est difficile de te donner une réponse avec les éléments fournis. En effet, tu ne nous fournis pas les entités et notamment l'entité sur laquelle est basée le formulaire InscriptionEleveType, si j'ai bien compris cette entité est justement l'entité eleve, la. Manifestement, cette entité "n'accroche" pas l'école dans le formulaire qui est peut-être mal configuré. Tu remarqueras dans l'extrait de la table eleve que tu fournis, l'id de l'école est à null, et donc l'erreur reçue ne fait que confirmer la valeur de la table c'est-à-dire que $eleve->getEcole() est null. En conclusion, montre nous le formulaire type : InscriptionEleveType. On ne voit d'ailleurs pas dans ta vue twig, le widget du type form_widget(form.ecole)!

      Par ailleurs, même si ce n'est pas l'objet de ta question, il est bizarre de faire une relation OneToOne entre ecole et eleve. On s'attendrait plutôt à une relation ManyToOne dans l'entité eleve (une école a plusieurs élèves et un élève a une seule école).

      A toi

      • Partager sur Facebook
      • Partager sur Twitter
        15 octobre 2018 à 17:46:13

        Merci beaucoup CarréDas pour votre réponse.

        Oui vous avez raison concernant la relation entre les entités.

        Voici le fichier InscriptionEleveType.php

        <?php
        /**
         * Created by PhpStorm.
         * User: Client
         * Date: 23/09/2018
         * Time: 12:56
         */
        
        namespace AppBundle\Form;
        
        use AppBundle\Entity\Eleve;
        use Doctrine\DBAL\Types\DateTimeType;
        use Symfony\Component\Form\AbstractType;
        use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
        use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
        use Symfony\Component\Form\Extension\Core\Type\IntegerType;
        use Symfony\Component\Form\Extension\Core\Type\TextType;
        use Symfony\Component\Form\FormBuilderInterface;
        use Symfony\Component\OptionsResolver\OptionsResolver;
        use Symfony\Component\Validator\Constraints\Date;
        
        
        class InscriptionEleveType extends AbstractType
        {
        
            public function buildForm(FormBuilderInterface $builder, array $options)
            {
                $builder
                    ->add('nom', TextType::class, array(
                        'label' => 'Nom',
                    ))
                    ->add('prenom', TextType::class, array(
                        'label' => 'Prénom',
                    ))
                    ->add('numTel', IntegerType::class, array(
                        'label' => 'Num tél',
                    ))
                    ->add('adresse', TextType::class, array(
                        'label' => 'Adresse',
                    ))
                    ->add('ville', TextType::class, array(
                        'label' => 'Ville de résidence '))
                    ->add('codePostale', TextType::class, array(
                        'label' => 'Code Postale '
                    ))
                    ->add('dateNaissance', BirthdayType::class, array(
                        'label' => 'Date de naissance'
                    ))
                    ->add('nationalite', TextType::class, array(
                        'label' => 'Nationalité'
                    ))
                    ->add('sexe', ChoiceType::class, array(
                        'choices' => array(
                            'Féminin'=>'Féminin',
                            'Masculin'=>'Masculin')))
        
        
        
                    ->add('utilisateur', RegistrationFormType::class, array(
                        'label' => false
                    ));
            }
        
        
            public function configureOptions(OptionsResolver $resolver)
            {
                $resolver->setDefaults(array(
                    'data_class' => Eleve::class,
                ));
            }
        
        
            public function getBlockPrefix()
            {
                return null;
            }
        
            public function getName()
            {
                return $this->getBlockPrefix();
            }
        
        }

        Le fichier Ecole.php

        <?php
        
        namespace AppBundle\Entity;
        
        use Doctrine\ORM\Mapping as ORM;
        use Gedmo\Mapping\Annotation as Gedmo;
        use Gedmo\Translatable\Translatable;
        use Knp\DoctrineBehaviors\Model as ORMBehaviors;
        use Symfony\Component\PropertyAccess\PropertyAccess;
        use Symfony\Component\Validator\Constraints as Assert;
        
        /**
         * Ecole
         *
         * @ORM\Table(name="ecole")
         * @ORM\Entity(repositoryClass="AppBundle\Repository\EcoleRepository")
         */
        class Ecole
        {
            use ORMBehaviors\Translatable\Translatable;
        
            /**
             * @var int
             *
             * @ORM\Column(name="id", type="integer")
             * @ORM\Id
             * @ORM\GeneratedValue(strategy="AUTO")
             */
            private $id;
        
            /**
             * @var string
             *
             * @ORM\Column(name="nom", type="string", length=255)
             */
            private $nom;
        
            /**
             * @var string
             *
             * @ORM\Column(name="description", type="text", length=255)
        //     * @Gedmo\Translatable()
             */
            private $description;
        
            /**
             * @var string
             *
             * @ORM\Column(name="adresse", type="string", length=255)
             */
            private $adresse;
        
            /**
             * @var string
             *
             * @ORM\Column(name="email", type="string", length=255)
             */
            private $email;
        
            /**
             * @var integer
             *
             * @ORM\Column(name="numTel", type="integer", length=255)
             */
            private $numTel;
        
            /**
             * @var string
             *
             * @ORM\Column(name="gouvernorat", type="string", length=255)
             */
            private $gouvernorat;
        
            /**
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Image", cascade={"all"})
             */
            private $logo;
        
            /**
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\EcoleTranslation", mappedBy="ecoTr")
             */
            private $eco;
        
            /**
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Eleve", mappedBy="ecole")
             */
            private $eleve;
            /**
             * @Assert\Valid()
             */
            protected $translations;
        
            public function __call($method, $arguments)
            {
                return PropertyAccess::createPropertyAccessor()->getValue($this->translate(), $method);
            }
        
            /**
             * Get id
             *
             * @return int
             */
            public function getId()
            {
                return $this->id;
            }
        
            /**
             * Set nom
             *
             * @param string $nom
             *
             * @return Ecole
             */
            public function setNom($nom)
            {
                $this->nom = $nom;
        
                return $this;
            }
        
            /**
             * Get nom
             *
             * @return string
             */
            public function getNom()
            {
                return $this->nom;
            }
        
            /**
             * Set adresse
             *
             * @param string $adresse
             *
             * @return Ecole
             */
            public function setAdresse($adresse)
            {
                $this->adresse = $adresse;
        
                return $this;
            }
        
            /**
             * Get adresse
             *
             * @return string
             */
            public function getAdresse()
            {
                return $this->adresse;
            }
        
            /**
             * Set email
             *
             * @param string $email
             *
             * @return Ecole
             */
            public function setEmail($email)
            {
                $this->email = $email;
        
                return $this;
            }
        
            /**
             * Get email
             *
             * @return string
             */
            public function getEmail()
            {
                return $this->email;
            }
        
            /**
             * Set numTel
             *
             * @param string $numTel
             *
             * @return Ecole
             */
            public function setNumTel($numTel)
            {
                $this->numTel = $numTel;
        
                return $this;
            }
        
            /**
             * Get numTel
             *
             * @return string
             */
            public function getNumTel()
            {
                return $this->numTel;
            }
        
        
            /**
             * Set description
             *
             * @param string $description
             *
             * @return Ecole
             */
            public function setDescription($description)
            {
                $this->description = $description;
        
                return $this;
            }
        
            /**
             * Get description
             *
             * @return string
             */
            public function getDescription()
            {
                return $this->description;
            }
        
            /**
             * Set logo
             *
             * @param \AppBundle\Entity\Image $logo
             *
             * @return Ecole
             */
            public function setLogo(\AppBundle\Entity\Image $logo = null)
            {
                $this->logo = $logo;
        
                return $this;
            }
        
            /**
             * Get logo
             *
             * @return \AppBundle\Entity\Image
             */
            public function getLogo()
            {
                return $this->logo;
            }
        
            /**
             * Set gouvernorat
             *
             * @param string $gouvernorat
             *
             * @return Ecole
             */
            public function setGouvernorat($gouvernorat)
            {
                $this->gouvernorat = $gouvernorat;
        
                return $this;
            }
        
            /**
             * Get gouvernorat
             *
             * @return string
             */
            public function getGouvernorat()
            {
                return $this->gouvernorat;
            }
        
            /**
             * Set eco
             *
             * @param \AppBundle\Entity\EcoleTranslation $eco
             *
             * @return Ecole
             */
            public function setEco(\AppBundle\Entity\EcoleTranslation $eco = null)
            {
                $this->eco = $eco;
        
                return $this;
            }
        
            /**
             * Get eco
             *
             * @return \AppBundle\Entity\EcoleTranslation
             */
            public function getEco()
            {
                return $this->eco;
            }
        
            /**
             * Set eleve
             *
             * @param \AppBundle\Entity\Eleve $eleve
             *
             * @return Ecole
             */
            public function setEleve(\AppBundle\Entity\Eleve $eleve = null)
            {
                $this->eleve = $eleve;
        
                return $this;
            }
        
            /**
             * Get eleve
             *
             * @return \AppBundle\Entity\Eleve
             */
            public function getEleve()
            {
                return $this->eleve;
            }
        }
        

        Le fichier Eleve.php

        <?php
        
        namespace AppBundle\Entity;
        
        use Doctrine\ORM\Mapping as ORM;
        
        /**
         * Eleve
         *
         * @ORM\Table(name="eleve")
         * @ORM\Entity(repositoryClass="AppBundle\Repository\EleveRepository")
         */
        class Eleve
        {
            /**
             * @var int
             *
             * @ORM\Column(name="id", type="integer")
             * @ORM\Id
             * @ORM\GeneratedValue(strategy="AUTO")
             */
            private $id;
        
            /**
             * @var string
             *
             * @ORM\Column(name="nom", type="string", length=255)
             */
            private $nom;
        
            /**
             * @var string
             *
             * @ORM\Column(name="prenom", type="string", length=255)
             */
            private $prenom;
        
            /**
             * @var string
             *
             * @ORM\Column(name="nationalite", type="string", length=255)
             */
            private $nationalite;
        
            /**
             * @var string
             *
             * @ORM\Column(name="sexe", type="string", length=255)
             */
            private $sexe;
        
            /**
             * @var integer
             *
             * @ORM\Column(name="numtel", type="integer", length=8)
             */
            private $numtel;
        
            /**
             * @var string
             *
             * @ORM\Column(name="adresse", type="string", length=255)
             */
            private $adresse;
        
            /**
             * @var string
             *
             * @ORM\Column(name="codePostale", type="string", length=255)
             */
            private $codePostale;
        
            /**
             * @var string
             *
             * @ORM\Column(name="ville", type="string", length=255)
             */
            private $ville;
        
            /**
             * @var \DateTime
             *
             * @ORM\Column(name="dateNaissance", type="date")
             */
            private $dateNaissance;
        
            /**
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Utilisateur", inversedBy="eleve", cascade={"all"})
             */
            private $utilisateur;
        
            /**
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Ecole", inversedBy="eleve", cascade={"all"})
             */
            private $ecole;
        
            /**
             * Get id
             *
             * @return int
             */
            public function getId()
            {
                return $this->id;
            }
        
            /**
             * Set nom
             *
             * @param string $nom
             *
             * @return Eleve
             */
            public function setNom($nom)
            {
                $this->nom = $nom;
        
                return $this;
            }
        
            /**
             * Get nom
             *
             * @return string
             */
            public function getNom()
            {
                return $this->nom;
            }
        
            /**
             * Set prenom
             *
             * @param string $prenom
             *
             * @return Eleve
             */
            public function setPrenom($prenom)
            {
                $this->prenom = $prenom;
        
                return $this;
            }
        
            /**
             * Get prenom
             *
             * @return string
             */
            public function getPrenom()
            {
                return $this->prenom;
            }
        
            /**
             * Set nationalite
             *
             * @param string $nationalite
             *
             * @return Eleve
             */
            public function setNationalite($nationalite)
            {
                $this->nationalite = $nationalite;
        
                return $this;
            }
        
            /**
             * Get nationalite
             *
             * @return string
             */
            public function getNationalite()
            {
                return $this->nationalite;
            }
        
            /**
             * Set sexe
             *
             * @param string $sexe
             *
             * @return Eleve
             */
            public function setSexe($sexe)
            {
                $this->sexe = $sexe;
        
                return $this;
            }
        
            /**
             * Get sexe
             *
             * @return string
             */
            public function getSexe()
            {
                return $this->sexe;
            }
            /**
             * Set adresse
             *
             * @param string $adresse
             *
             * @return Eleve
             */
            public function setAdresse($adresse)
            {
                $this->adresse = $adresse;
        
                return $this;
            }
        
            /**
             * Get adresse
             *
             * @return string
             */
            public function getAdresse()
            {
                return $this->adresse;
            }
        
            /**
             * Set codePostale
             *
             * @param string $codePostale
             *
             * @return Eleve
             */
            public function setCodePostale($codePostale)
            {
                $this->codePostale = $codePostale;
        
                return $this;
            }
        
            /**
             * Get codePostale
             *
             * @return string
             */
            public function getCodePostale()
            {
                return $this->codePostale;
            }
        
            /**
             * Set ville
             *
             * @param string $ville
             *
             * @return Eleve
             */
            public function setVille($ville)
            {
                $this->ville = $ville;
        
                return $this;
            }
        
            /**
             * Get ville
             *
             * @return string
             */
            public function getVille()
            {
                return $this->ville;
            }
        
            /**
             * Set dateNaissance
             *
             * @param \DateTime $dateNaissance
             *
             * @return Eleve
             */
            public function setDateNaissance($dateNaissance)
            {
                $this->dateNaissance = $dateNaissance;
        
                return $this;
            }
        
            /**
             * Get dateNaissance
             *
             * @return \DateTime
             */
            public function getDateNaissance()
            {
                return $this->dateNaissance;
            }
        
            /**
             * Set numtel
             *
             * @param integer $numtel
             *
             * @return Eleve
             */
            public function setNumtel($numtel)
            {
                $this->numtel = $numtel;
        
                return $this;
            }
        
            /**
             * Get numtel
             *
             * @return integer
             */
            public function getNumtel()
            {
                return $this->numtel;
            }
        
            /**
             * Set utilisateur
             *
             * @param \AppBundle\Entity\Utilisateur $utilisateur
             *
             * @return Eleve
             */
            public function setUtilisateur(\AppBundle\Entity\Utilisateur $utilisateur = null)
            {
                $this->utilisateur = $utilisateur;
                $this->utilisateur->addRole('ROLE_ELEVE');
        
                return $this;
            }
        
            /**
             * Get utilisateur
             *
             * @return \AppBundle\Entity\Utilisateur
             */
            public function getUtilisateur()
            {
                return $this->utilisateur;
            }
        
            /**
             * Set ecole
             *
             * @param \AppBundle\Entity\Ecole $ecole
             *
             * @return Eleve
             */
            public function setEcole(\AppBundle\Entity\Ecole $ecole = null)
            {
                $this->ecole = $ecole;
        
                return $this;
            }
        
            /**
             * Get ecole
             *
             * @return \AppBundle\Entity\Ecole
             */
            public function getEcole()
            {
                return $this->ecole;
            }
        }
        



        • Partager sur Facebook
        • Partager sur Twitter
          16 octobre 2018 à 8:09:23

          Bonjour,

          Donc tout va bien. C'est bien ce que je suspectai! A aucun moment, tu n'affectes une école à un $eleve->getEcole() reste normalement à null.

          Il faut que tu "imbriques" dans ton formulaire inscriptioneleveType le champ ecole. Va voir comment procéder en cherchant "symfony formulaire imbriqué". C'est ce que tu as fait pour utilisateur (mais peut-être l'école est déjà définie et tu veux choisir dans la liste des écoles déjà présentes).

          A toi

          • Partager sur Facebook
          • Partager sur Twitter

          [Symfony3] Erreur Lors de l'inscription

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown