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