Messages d'information lors de l'enregistrement dans une database

Par bingoWRFC, il y a 1 an


Bonjour

J'ai créé un base de données avec 2 champs : name et imei pour enregistrer des appareils avec carte SIM

Le numéro imei doit être unique, le champ est indiqué comme tel dans la database

Le fonctionnement est conforme : le programme refuse d'engregistrer en base de donnée si le numéro IMEI est déjà existant.

Mais le comportement vers l'utilisateur n'est pas satisfaisant

Voici mon code, que pouvez-vous me conseiller

Dans la Form DeviceType.php j'ai indiqué

class DeviceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('name', TextType::class, [ 'attr' => [ 'class' => 'form-control-sm', 'maxlength' => '10' ], 'label' => 'Nom : ', 'label_attr' => [ 'class' => 'form-label mt-4' ], 'constraints' => [ new NotBlank([ 'message' => 'Veuillez saisir un nom d'appareil' ]), new Length([ 'max' => 30, 'maxMessage' => 'Le nom de l'appareil ne doit pas dépasser {{ limit }} caractères' ]) ] ]) ->add('imei', TextType::class, [ 'attr' => [ 'class' => 'form-control-sm', 'maxlength' => '20' ], 'label' => 'IMEI # : ', 'label_attr' => [ 'class' => 'form-label mt-4' ], 'constraints' => [ new NotBlank([ 'message' => 'Veuillez indiquer l\'IMEI de l\'appareil' ]), new Length([ 'max' => 30, 'maxMessage' => 'L\IMEI ne doit pas dépasser {{ limit }} caractères' ]) ] ]) ->add('submit', SubmitType::class, [ 'attr' => [ 'class' => 'btn btn-dark mt-4' ], 'label' => 'Créer', ]) ; }

Dans l'Entity Devices.php j'ai mis

use Symfony\Component\Validator\Constraints as Assert; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; #[ORM\Entity(repositoryClass: DeviceRepository::class)] #[UniqueEntity(fields: ['imei'], message: 'L\'IMEI doit être unique')] class Devices { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 10 )] #[Assert\NotBlank()] #[Assert\Length(max : 10)] private ?string $name = null; #[ORM\Column(length: 20)] #[Assert\NotBlank()] #[Assert\Length(max : 20)] private ?string $imei = null;

Dans le Controller DevicesController la function new pour ajouter un nouvel appareil

#[Route(path :'/devices/new', name: 'device.new', methods:['GET','POST'])] public function new( Request $request, EntityManagerInterface $manager ) : Response { $devive = new Device(); $form = $this->createForm(DeviceType::class,$device); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $device = $form->getData();; $manager->persist($device); $manager->flush(); $this->addFlash( 'success', 'Nouvel appareil créé avec succès !'); return $this->redirectToRoute('app_devices'); } return $this->render('pages/devices/new.html.twig', [ 'form' => $form->createView(), ]); }

Dans la page new.html.index

{% extends 'base.html.twig' %} {% block body %} <div class 'container'> <h2 class='mt-4'>Add Device</h2> {% for message in app.flashes('success') %} <div class="alert alert-success mt-4"> {{ message }} </div> {% endfor %} <div class="mx-auto" style="width: 200px;"> {{ form_start(form) }} <div class="form-group"> {{ form_label(form.name) }} {{ form_widget(form.name) }} <div class='form-error'> {{ form_errors(form.name) }} </div> <div class="form-group"> {{ form_label(form.imei) }} {{ form_widget(form.imei) }} <div class='form-error'> {{ form_errors(form.imei) }} </div> <div class="form-group"> {{ form_row(form.submit) }} </div> {{ form_end(form) }} </div> </div {% endblock %}

Merci

1 réponse

bingoWRFC, il y a 1 an

Je me repond

Il manquait le bundle Symfony flashy