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

  • lors d'un enregistrement avec un numero IMEI distinct le programme est redirigé vers la page qui liste les appareils mais je n'ai pas le message informant l'utilisateur du bon déroulement de l'enregistrement.
  • lors d'un enregistrement avec un numero IMEI déjà enregistré, le programme reste sur la page mais l'utilisateur ne reçois pas de message l' informant de l'echec n'y de la raison

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

Aucune réponse