Bonjour, je souhaite valider les champs dans un formualiare en symfony sans entity.
Mon controller :
<?php
namespace App\Controller;
use App\Form\SheetCarrycotType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class VehiculeController extends AbstractController
{
#[Route('/vehicule', name: 'app_vehicule')]
public function index(Request $request): Response
{
$form = $this->createForm(SheetCarrycotType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Code crétaion PDF
}
return $this->render('vehicule/index.html.twig', [
'form' => $form,
'breadcrumb' => 'Véhicule / Déclaration changement de conducteur nacelle',
'title' => 'Déclaration changement de conducteur nacelle => Plateau/Fourgon/Kangoo'
]);
}
}
Mon FormType :
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Validator\Constraints\NotBlank;
class SheetCarrycotType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add("immatriculation", TextType::class, [
"attr" => [
"class" => "form-control fst-italic text-black",
"placeholder" => "0",
],
"constraints" => [
new NotBlank([
"message" => "Veuillez saisir une immatriculation",
])
],
])
->add("kilometrage", IntegerType::class, [
"attr" => [
"class" => "form-control fst-italic text-black",
"placeholder" => "0",
],
"constraints" => [
new NotBlank([
"message" => "Veuillez saisir une immatriculation",
])
],
])
Mon twig :
{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }}
<fieldset class="border border-lg border-warning p-4 mb-2 rounded-xl">
<legend class="p-4 h4 text-center border border-lg border-warning-soft mb-4">Rappel </legend>
<div class="text-gray-700 m-4">
<span class="fw-800">Opérateur nacelle :</span> Titulaire d'un CACES R486, d'une fiche d'aptitude médicale et d'une autorisation de conduite en cours de validité. Former au port et à l'utilisation du harnais.</br>
<span class="fw-800">Surveillant nacelle :</span> Avant l'intervention, il doit être sensibilisé par l'opérateur nacelle afin de pouvoir effectuer toutes les manoeuvres de secours et d'alerte aux secours encas de besoin.</br></br>J'ai sensibilisé aux manoeuvres de secours le surveillant de manoeuvre nacelle.</br>
</div>
<div class="m-2 mx-4">
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="Rappel_Plateau" id="inlineCheckbox1" required>
<label class="form-check-label text-gray-700" for="inlineCheckbox1">J'ai pris connaissance des rappels ci-dessus</label>
</div>
</div>
</fieldset>
<fieldset class="border border-lg border-info p-4 mb-2 rounded-xl">
<legend class="p-4 h4 text-center border border-lg border-info-soft mb-4">Identification de la nacelle</legend>
<!-- Form Row -->
<div class="row gx-3mb-3">
<!-- Form Group (immatriculation)-->
<div class="col-md-6 pb-2">
<div class="form-floating">
{{ form_widget(form.immatriculation) }}
<label class="fst-italic text-gray-600" for="sheet_carrycot_immatriculation">Immatriculation :</label>
<div class="invalid-feedback">Veuillez saisir une immatriculation (Format -> AA-123-CC)</div>
</div>
</div>
<!-- Form Group (kilométrage)-->
<div class="col-md-6 pb-2">
<div class="form-floating">
{{ form_widget(form.kilometrage) }}
<label class="fst-italic text-gray-600" for="">Kilométrage(s) :</label>
<div class="invalid-feedback">Veuillez saisir un nombre (Format -> 1234565.....)</div>
</div>
</div>
</div>
<div class="col-2 p-2 d-flex align-items-stretch justify-content-end">
<button class="btn btn-blue" type="submit">{{ button_label|default('Enregistrer') }}</button>
</div>
{{ form_end(form) }}
Ce que je veux
Je souhaite l'affichage des erreurs
Ce que j'obtiens
Rien ne se passe