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