Bonjour à tous,
J'ai des problèmes pour la gestion des messages d'erreur lors de la validation d'un formulaire.
J'ai une entité 'monentite' qui contient 3 champs (nom, description, nombre) avec des asserts pour vérifier les valeurs saisies dans le formulaire.
Dans ma base qui contient mon entité, j'ai déjà créé l'entité : 'a', 'a', 2.
Dans ma page, je clique pour ouvrir mon formulaire. Je saisis 'a', 'a', 0, et je clique sur 'créer'.
Comme voulu, je suis bloqué par mes asserts, mais j'ai 2 problèmes :
1/ Pour le champ 'nom', le message d'erreur s'affiche 2 fois.
J'ai cherché ce problème sur le web, d'après ce que j'ai compris, c'est un problème de compatibilité de SF4 avec Bootstrap 4 qui génère le message d'erreur dans le champ label.
Mais je n'ai pas trouvé de solution pour n'avoir qu'un seul message.
2/ Avec mon assert pour le champ 'nombre', la valeur 0 est interdite.
J'ai bien un message d'erreur, mais il s'affiche en premier dans mon formulaire, et non au niveau du champ concerné. Et là, je ne vois pas pourquoi.
Je vous mets mes morceaux de code qui me semblent utiles, j'espère que vous aurez des idées !
Merci d'avance à tous.
Code dans mon entité :
Code dans mon contrôleur :
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 /** * Monentite * * @ORM\Table(name="monentite") * @ORM\Entity(repositoryClass="App\Repository\MonentiteRepository") * * @UniqueEntity(fields={"nom"}, message="Ce nom est déjà enregistré") */ class Monentite { /** * @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, unique=true) * @Assert\NotBlank */ private $nom; /** * @var string * * @ORM\Column(name="description", type="text") * @Assert\NotBlank */ private $description; /** * @var int * * @ORM\Column(name="nombre", type="smallint") * @Assert\NotBlank * @Assert\NotNull * @Assert\Positive */ private $nombre;
code dans ma vue 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 $monentite = new Monentite(); $form_monentite_builder = $this->createFormBuilder($monentite); $this->creer_form_monentite($form_monentite_builder); $form_monentite = $form_monentite_builder->getForm(); $form_monentite->handleRequest($request); if ($form_monentite->isSubmitted() && $form_monentite->isValid()) { // ... } else { return $this->render('monentite_creer.html.twig', array( 'form_monentite' => $form_monentite->createView() )); } return $this->render('monentite_creer.html.twig', array( 'form_monentite' => $form_monentite->createView() )); public function creer_form_monentite($form) { $form ->add('nom', TextType::class, array( 'label' => 'Nom', 'attr' => array('style' => 'width: 500px') )) ->add('description', TextareaType::class, array( 'label' => 'Description', 'attr' => array('style' => 'width: 500px') )) ->add('nombre', IntegerType::class, array( 'label' => 'Nombre', 'attr' => array('style' => 'width: 100px') )) ; }
Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 {{ form_start(form_monentite, {'action': path('monentite_creer'), 'method':'POST'}) }} <div> {{ form_widget(form_monentite) }} </div> <br> <div class="form-group"> <button type="submit" id="submit" value="Créer" name="submit" class="btn-default btn">Créer</button> <button type="submit" id="submit" value="Annuler" name="submit" class="btn-default btn">Annuler</button> </div> {{ form_rest(form_monentite) }} {{ form_end(form_monentite) }}
Partager