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

  1. #1
    Futur Membre du Club
    erreur sur mon projet symfony Class App\Form\Car does not exist
    Ce message n'a pas pu être affiché car il comporte des erreurs.

  2. #2
    Responsable LaTeX

    il ne faut pas mettre les annotations sur le controller
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /**
     * @Route("/car")
     */
    class CarController extends AbstractController
    mais sur les fonctions

  3. #3
    Futur Membre du Club
    je saisie pas ce que vous voulez dire par ça !! les annotations des routes?

  4. #4
    Responsable LaTeX

    j'ai lu trop vite, l'erreur t'indique qu'un form est appelé mais qua la classe n'existe pas. VOir du coté de cette class

  5. #5
    Futur Membre du Club
    justement j'ai appellé le form\CarType et non pas le form\Car, j'ai bien la classe car mais le form CarType!

  6. #6
    Membre confirmé
    Salut,

    Je pense que l'annotation sur la classe du contrôleur est correcte, cf. https://symfony.com/doc/current/rout...s-and-prefixes.

    Comment obtiens-tu cette erreur ? Est-ce que tu peux nous montrer le code de ton CarType stp ? (en utilisant les balises CODE)

  7. #7
    Futur Membre du Club
    voici mon code de carType
    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
    <?php
     
    namespace App\Form;
     
    use App\Entity\Car;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Vich\UploaderBundle\Form\Type\VichImageType;
     
    class CarType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('brand')
                ->add('year')
                ->add('price')
                ->add('imageFile',VichImageType::class)
                ->add('isNew')
            ;
        }
     
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => Car::class,
            ]);
        }
    }

  8. #8
    Membre confirmé
    Peux-tu utiliser les balises [CODE] (le bouton #) quand tu partages du code stp ? (ça améliore grandement la lisibilité)

    A priori je ne vois pas d'erreur dans ton formulaire, peux-tu nous dire quand est-ce que tu obtiens cette erreur ?
    Car visiblement quelque chose dans le code de ton application fait appel ou fait référence à une classe inexistante (App\Form\Car).

  9. #9
    Futur Membre du Club
    oui ... j'ai crée l'entité car donc j'ai une classe car mais pour le form je n'ai pas de form qui s'appelle car mais cartype!

  10. #10
    Membre confirmé
    Troisième tentative...

    Comment/à quel moment obtiens-tu cette erreur ? Est-ce que ton application fonctionnait correctement avant que tu modifies quelque chose ? (si oui, qu'est-ce que tu as modifié)


    Moins tu nous donnes d'informations, plus c'est difficile pour nous de t'aider !

  11. #11
    Futur Membre du Club
    Desolée !
    en faite j'ai crée un nouveau crud pour l'entité booking et j'ai rajouté un use Symfony\Bridge\Doctrine\Form\Type\EntityType; dans le form booking home ! sinon tout était bien fonctionnel avant cette action et la j'ai des erreurs partout!
    je vais partager mon code pour que vous visualiser mieux
    Je vous remercie de votre aide et réponses et si vous avez d'autres conseils a me donner sur le code je suis prenante

    Home controller qui va m'afficher le formulaire de réservation
    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
     
    <?php
     
    namespace App\Controller;
    use App\Entity\Booking;
    use App\Form\BookingType;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Routing\Annotation\Route;
     
    class HomeController extends AbstractController
     
     
    {
        /**
         * @Route("/", name="home")
         */
     
        public function index(Request $request)
        {
            $form = $this->createForm(BookingType::class);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $brand = $form->getPickLocation();
                $pdate = $form->getPickDate();
                $rdate = $form->getReturnDate();
                $pickcar = $form->getPickCar();
     
     
            }
     
            return $this->render('home/index.html.twig', [
                'form' => $form->createView(),'brand' =>$brand,'pdate'=>$pdate,'rdate'=>$rdate,'pickcar'=>$pickcar
            ]);
        }
     
    }


    BookingType form

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    <?php
     
    namespace App\Form;
     
    use App\Entity\Booking;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
    use Symfony\Component\Form\Extension\Core\Type\DateType;
    use Symfony\Bridge\Doctrine\Form\Type\EntityType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
     
    class BookingType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
            ->add('pickLocation', ChoiceType::class, [
                'choices' => [
                    'Bordeaux' => 'Bordeaux',
                    'Paris' => 'Paris',
                ],
                'attr' => [
                    'class' => 'custom-select car-choose'
                ],
                'required' => true
            ])
            ->add('pickDate', DateType::class, [
                'widget' => 'single_text',
            ])
            ->add('returnDate', DateType::class, [
                'widget' => 'single_text',
            ])
            ->add('pickCar', EntityType::class, [
                'class' => Car::class,
                'choice_label' =>'brand',
                'attr' => [
                    'class' => 'custom-select car-choose'
                ],
                'required' => true
            ])
        ;
        }
     
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => Booking::class,
            ]);
        }
    }



    Car 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
     
     
    <?php
     
    namespace App\Controller;
     
    use App\Entity\Car;
    use App\Form\CarType;
    use App\Repository\CarRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
    /**
     * @Route("/car")
     */
    class CarController extends AbstractController
    {
        /**
         * @Route("/", name="car_index", methods={"GET"})
         */
        public function index(CarRepository $carRepository): Response
        {
            return $this->render('car/index.html.twig', [
                'cars' => $carRepository->findAll(),
            ]);
        }
     
        /**
         * @Route("/new", name="car_new", methods={"GET","POST"})
         */
        public function new(Request $request): Response
        {
            $car = new Car();
            $form = $this->createForm(CarType::class, $car);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($car);
                $entityManager->flush();
     
                return $this->redirectToRoute('car_index');
            }
     
            return $this->render('car/new.html.twig', [
                'car' => $car,
                'form' => $form->createView(),
            ]);
        }
     
        /**
         * @Route("/{id}", name="car_show", methods={"GET"})
         */
        public function show(Car $car): Response
        {
            return $this->render('car/show.html.twig', [
                'car' => $car,
            ]);
        }
     
        /**
         * @Route("/{id}/edit", name="car_edit", methods={"GET","POST"})
         */
        public function edit(Request $request, Car $car): Response
        {
            $form = $this->createForm(CarType::class, $car);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $this->getDoctrine()->getManager()->flush();
     
                return $this->redirectToRoute('car_index');
            }
     
            return $this->render('car/edit.html.twig', [
                'car' => $car,
                'form' => $form->createView(),
            ]);
        }
     
        /**
         * @Route("/{id}", name="car_delete", methods={"DELETE"})
         */
        public function delete(Request $request, Car $car): Response
        {
            if ($this->isCsrfTokenValid('delete'.$car->getId(), $request->request->get('_token'))) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->remove($car);
                $entityManager->flush();
            }
     
            return $this->redirectToRoute('car_index');
        }
    }



    CarType form

    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
     
     
     
    <?php
     
    namespace App\Form;
     
    use App\Entity\Car;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Vich\UploaderBundle\Form\Type\VichImageType;
     
    class CarType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('brand')
                ->add('year')
                ->add('price')
                ->add('imageFile',VichImageType::class)
                ->add('isNew')
            ;
        }
     
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => Car::class,
            ]);
        }
    }

  12. #12
    Membre confirmé
    Dans ton BookingType, je pense que pour commencer, il te manque l'import du namespace de ton entité "Car" que tu utilises dans le champ "pickCar", donc ajoute un :
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    use App\Entity\Car;


    Essaye de voir si ça te corrige certaines erreurs ou si ça ne change rien. Ensuite ce qui serait éventuellement intéressant dans ton prochain message si tu as encore besoin d'aide, c'est de partager le code de home/index.html.twig pour voir comment tu effectues le rendu du contenu de ton formulaire dans ton template.

    Bon courage d'ici là.

  13. #13
    Futur Membre du Club
    Bonjour Thomas
    Merci de votre réponse , mon probléme est résolu
    Effectivement c'était ça , j'ai importé l'entité car dans BookingType et ça fonctionnait! Par contre je veux faire la même chose pour le lieu de départ je veux passer par entitytype et non pas choice type mais je vois pas comment faire! j'ai pas une entité qui liste les lieux de départ ! et si je dois lié ça à l'entité car comme j'ai fait avec pickCar je dois rajouté une propriété dans l'entité car qui indique le lieu ou bien je fais une relation!! je suis perdue!
    je vous partage le home.index.twig (la partie de form)
    Code twig :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
    43
    44
    45
    46
    47
    48
    {% extends 'base.html.twig' %}
     
    {% block title %} CAR RENT{% endblock %}
     
    {% block body %}
     
        <!--== SlideshowBg Area Start ==-->
        <section id="slideslow-bg">
            <div class="container">
                <div class="row">
                    <div class="col-lg-12 text-center">
                        <div class="slideshowcontent">
                            <div class="display-table">
                                <div class="display-table-cell">
                                    <h1>Louer une voiture aujourd'hui!</h1>
     
     
                                    <div class="book-ur-car">
                                       {{ form_start(form) }}
                                            <div class="car-choose bookinput-item">
                                                {{ form_widget(form.pickLocation) }}
                                            </div>
     
                                            <div class="pick-date bookinput-item">
                                                {{ form_widget(form.pickDate) }}
                                            </div>
     
                                            <div class="retern-date bookinput-item">
                                                {{ form_widget(form.returnDate) }}
                                            </div>
     
                                            <div class="car-choose bookinput-item">
                                                {{ form_widget(form.pickCar) }}
                                            </div>
     
                                            <div class="bookcar-btn bookinput-item">
                                                <button type="submit">RESERVATION</button>
                                            </div>
                                       {{ form_end(form) }}
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>
        <!--== SlideshowBg Area End ==-->

  14. #14
    Membre confirmé
    Citation Envoyé par loubna06 Voir le message
    Par contre je veux faire la même chose pour le lieu de départ je veux passer par entitytype et non pas choice type mais je vois pas comment faire! j'ai pas une entité qui liste les lieux de départ ! et si je dois lié ça à l'entité car comme j'ai fait avec pickCar je dois rajouté une propriété dans l'entité car qui indique le lieu ou bien je fais une relation!! je suis perdue!
    En effet dans ton entité Booking il faudra définir une relation avec une nouvelle entité (ex: Location). Voici la page de la documentation qui détaille comment faire : https://symfony.com/doc/current/doct...ny-association
    Ensuite une fois que tout sera bon côté entités et relations, il te suffira de modifier ton formulaire BookingType pour utiliser un champ de type EntityType sur pickLocation en précisant le nom de ton entité Location.

###raw>template_hook.ano_emploi###