Bonjour,
Je récupère des données soumises par 'un formulaire sur une page qui s'occupe de les lister sous forme de tableau HTML simple, et je souhaites avoir la possibilité de modifier le statut de ces soumissions via un bouton "valider" présent sur chacune des lignes du tableau. (status passe de l'état 1 à 2 en BDD)
J'utilise pour cela le code suivant sur le controller et le fichier twig :
CONTROLLER :
/**
* @Route("/Test/edit/{to}", name="app_change")
*/
public function update(string $to,Request $request, EntityManagerInterface $entityManager)
{
$modifstatus = $this->getDoctrine()->getRepository(Test::class)->findOneBy([ 'status' => '1']);
$modifstatus->setStatus ($to);
$entityManager->flush();
return $this->redirectToRoute('test_liste');
}
TWIG (je ne laisse que le TD qui pose problème le reste c'est juste un tableau qui liste de la récupération de data du formulaire :
{% for test in listTest %}
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
<td class='has-text-centered is-vcentered'>
<a type="button" class="btn btn-primary btn-xs " href=
"{{ path('app_change', {'status': test.status, 'to': '2'}) }}">Valider</a>
</td>
</tr>
{% endfor %}
Ce que je veux
Changer le statut et donc valider une ligne spécifique du formulaire via la liste en cliquant sur valider .
Ce que j'obtiens
Lorsque j'ai par exemple 5 ou 6 lignes de formulaires dans le tableau , lorsque je clique sur valider, cela valide la première ligne du tableau et non pas la ligne sur laquelle j'ai cliquer sur le bouton valider.
Thank's
Salut je ne suis pas sûr d'avoir tout suivi mais d'après ce que je vois la route "app_change" sait dans quel état mettre ton item mais ne sait pas lequel. il n'y aurait pas quelque chose comme ça à faire
/**
* @Route("/Test/edit/{id}/{to}", name="app_change")
*/
public function update(string $to,Request $request, EntityManagerInterface $entityManager)
{
$modifstatus = $this->getDoctrine()->getRepository(Test::class)->findOneBy([ 'id' => $id]);
$modifstatus->setStatus ($to);
$entityManager->flush();
return $this->redirectToRoute('test_liste');
}
{% for test in listTest %}
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
<td class='has-text-centered is-vcentered'>
<a type="button" class="btn btn-primary btn-xs " href=
"{{ path('app_change', {'id': test.id, 'to': '2'}) }}">Valider</a>
</td>
</tr>
{% endfor %}
en fait le nom du champs en BDD est bien status du coup si je fais ça ce serait pour changer l'ID non ?
dans l'entitée concernée j'ai ça concernant le status :
const STATUT_DEMANDE_EN_COURS = 1;
const STATUT_DEMANDE_VALIDEE = 2;
const STATUT_DEMANDE_REFUSEE = 3;
private $status = [];
public const StatusTestTranslation = [
1 => 'Demande en cours de traitement',
2 => 'Demande validée',
3 => 'Demande refusée'
];
public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}
en gros le problème est que dans le tableau HTML, il va piocher la première ligne (td) qu'il trouve avec le statut "1" et la valider alors que je clique par exemple sur la 6ème ou 7ème ligne.
C'est lié au fait que je ne filtre que via le ->findOneBy([ 'status' => '1']); mais je ne trouve pas la soluce hélas
as tu essayé ce que je t'ai proposé ?
ce que tu me décris c'est le code que tu as écrit, mais pas ce que je te propose :-)
Effectivement sorry :) je viens d'essayer , ça me donne :
No route found for "GET /Test/edit/2" (from "http://localhost/test_liste")
oui il faut que tu réactualises ta page de liste pour ensuite suivre un bon lien car les liens sont maintenant de la forme /test/edit/:id/:status .
tu as du probablement cliquer sur actualiser alors que tu venais de changer la route qui redirigeait vers la méthode update
oui c'est bien ça, par contre du coup là il m'indique que la variable Id n'est pas définie , pourtant l'ID remonte bien dans l'URL : http://localhost/Test/edit/14/2
Warning: Undefined variable $id
l'erreur pointe sur cette ligne
$modifstatus = $this->getDoctrine()->getRepository(Test::class)->findOneBy(['id' => $id]);
ah oui j'ai oublié de le mettre dans la méthode
public function update(string $to, $id, Request $request, EntityManagerInterface $entityManager)
Oh punaise ça marche !!!!!!!!
Un énorme merci à toi lhapaipai !!!!