Bonjour,

Voila je rencontre un petit problème avec mon code.
Dans mon formulaire d'édition, je souhaite ôter la validation html5 du client-side, j'ai donc ajouter le code :

{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }}
    {{ form_widget(form) }}
{{ form_end(form) }}

Voulant tester mes règles de validation, je vide un champs, mais j'ai le message symfony au lieu d'avoir une erreur sur mon formulaire :
Symfony\Component\PropertyAccess\Exception\InvalidArgumentException:
Expected argument of type "string", "null" given at property path "code_fonction".

Ce que je fais

Mon entité (j'ai essayé de passer toutes mes propriétés en nullable = true, mais toujours même problème) :

/**
 * @ORM\Entity(repositoryClass=ConduitRepository::class)
 */
class Conduit
{

    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=40, nullable=true)
     * @Assert\NotBlank
     */
    private $code_fonction;

    /**
     * @ORM\Column(type="string", length=40, nullable=true)
     * @Assert\NotBlank
     */
    private $num_serie;

    /**
     * @ORM\Column(type="string", length=40, nullable=true)
     * @Assert\NotBlank
     */
    private $dr_a;

    /**
     * @ORM\Column(type="string", length=40, nullable=true)
     * @Assert\NotBlank
     */
    private $cat;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank
     */
    private $assemblee;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\NotBlank
     */
    private $noeud_a;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $nom_eqpt_logique_a;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $ident_eqpt_logique_a;

Mon Controller

/**
     * @Route("/nettoyage/{id}", name="trenten.edit", methods={"GET","POST"})
     * @param Request $request
     * @param Conduit $conduit
     * @return Response
     */
    public function edit(Request $request, Conduit $conduit): Response
    {
        $form = $this->createForm(ConduitType::class, $conduit);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->em->flush();

            return $this->redirectToRoute('trenten.index');
        }

        return $this->render('conduit/trenten/edit.html.twig', [
            'conduit' => $conduit,
            'form' => $form->createView(),
        ]);
    }

Mon formulaire (pour l'instant le plus basique possible)

{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }}
    {{ form_widget(form) }}
    <button class="btn">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

Je dois certainement passer à côté de quelques choses, mais depuis deux jours je bloque...
Merci d'avance pour votre aide

3 réponses


olive140
Réponse acceptée

Bonjour,
Cela vient du tipage au niveau du setter:

public function setCodeFonction(string $code_fonction)

à remplacer par

public function setCodeFonction(?string $code_fonction)
Ybag
Auteur

Merci beaucoup !
Je suis complètement passer à côté...

Merci de mettre le sujet en résolu.