Bonsoir,
Merci Akli et désolé pour mon retard.
En fait, j'ai du faire une erreur ailleurs, car dan certains formulaires, ça fonctionne.
Pour te répondre, je fais un formulaire manuel.
Voici l'erreur :
The CSRF token is invalid. Please try to resubmit the form.
Caused by:
Symfony\Component\Security\Csrf\CsrfToken {#944 ▼
-id: "opinion"
-value: ""
}
Voici ma page vue avec Twig :
{% block body %}
<h1>Les avis </h1>
{% for message in app.flashes('success') %}
{{ message }}
{% endfor %}
<form method="post">
<section class="training-form">
<section class="field">{#
#}<section class="opinion">{#
#}<input type="hidden" id="opinion_rate" name="opinion[rate]" value="">{#
#}<img src="{{ asset('img/star.svg') }}" class="star" onmouseover="rating.hover(this, 1);" onmouseout="rating.out(this);" onclick="rating.set(this, 1);">{#
#}<img src="{{ asset('img/star.svg') }}" class="star" onmouseover="rating.hover(this, 2);" onmouseout="rating.out(this);" onclick="rating.set(this, 2);">{#
#}<img src="{{ asset('img/star.svg') }}" class="star" onmouseover="rating.hover(this, 3);" onmouseout="rating.out(this);" onclick="rating.set(this, 3);">{#
#}<img src="{{ asset('img/star.svg') }}" class="star" onmouseover="rating.hover(this, 4);" onmouseout="rating.out(this);" onclick="rating.set(this, 4);">{#
#}<img src="{{ asset('img/star.svg') }}" class="star" onmouseover="rating.hover(this, 5);" onmouseout="rating.out(this);" onclick="rating.set(this, 5);">{#
#}<section class="opinion-background" id="opinion-background"></section>{#
#}</section>{#
#}</section>
<section class="field">
<label for="opinion_opinion" class="required">Opinion</label>
<textarea id="opinion_opinion" name="opinion[opinion]"></textarea>
</section>
<section class="field">
{# {{ form_row(form._token) }} #}
<input type="hidden" name="_token" value="{{ csrf_token('opinion_form') }}">
<button>Soumettre</button>
</section>
</section>
</form>
{% endblock %}
Voici le contrôleur qui gère la vue :
class OpinionsController extends AbstractController
{
/**
* @Route("/opinions/{id}", name="opinions")
*/
public function index(int $id, Request $request, TrainingRepository $repository, EntityManagerInterface $em): Response
{
$opinion = new Opinion();
$form = $this->createForm(OpinionType::class, $opinion);
$form->handleRequest($request);
$submittedToken = $request->request->get('_token');
// dd($submittedToken);
if ($form->isSubmitted() && $form->isValid() && $this->isCsrfTokenValid('opinion_form', $submittedToken)) { // && $this->isCsrfTokenValid('opinion_form', $submittedToken)
dump($submittedToken);
$user = $this->getUser();
$opinion->setIdTraining($id);
$id_former = $repository->findIdFormerById($id);
$opinion->setIdFormer($id_former);
$opinion->setIdUser($user->getId());
$opinion->setCreateAt(new \DateTime());
$opinion->setReadByFormer(1);
$em->persist($opinion);
$em->flush();
$this->addFlash('succès', 'Votre avis a bien été pris en compte.');
}
return $this->render('public/opinions.html.twig', [
'controller_name' => 'OpinionsController',
'form' => $form->createView(),
]);
}
}
Je vous remercie pour votre aide !