pb d'id qui n'est pas récupéré dans la route

Par ginettebaldoche, il y a 8 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

controller :

public function index($bilanId, $ancId) { $bilan = Bilan::find($bilanId); $anc = Anc::find($ancId); $criterespersos = $bilan->criterespersos; return view('criterespersos.index', compact('criterespersos', 'bilan', 'anc')); }

route :

Route::get('bilans/{id}/{anc}/criteresperso/add', 'CriterespersoController@index')->name('bilan.criteresperso.index');

une partie de la vue qui envoie la route :

<div class="card-block"> <form class="form-horizontal" method="post" action="{{ route('bilan.resultat.add', ['bilanId' => $bilan->id] )}}" name="formu"> {{ csrf_field() }} <table class="table table-striped"> <thead> <tr> <th>Sexe</th> <th>Poids</th> <th></th> <th>Anc</th> </tr> </thead> <tbody class="text-primary"> <tr> <td><input id="sexe" size="7" maxlenght="3" name="valsexe" value="{{ $bilan->sexe }}"></td> <td><input size="7" maxlenght="3" name="valpoids" value="{{ $bilan->Poids_kg }}"></td> <td><input type="hidden" size="2" maxlenght="3" id="activite" name="valactivite" value="{{ $bilan->activite_mobile }}"></td> <td><input class="valeur" type="text" id="ancId" name="ancId" value="{{ $anc->id }}"></td> </tr> </table> </form> <table class="table table-sm"> <tbody> <tr> <td><a id="troubles" type="submit" class="btn btn-outline-success" name="troubles" value="troubles " href="{{ route("bilan.trouble.index", $bilan->id) }}">Troubles</a></td> <td> <input class="btn btn-outline-primary" type="submit" value="Vos apports" onclick="ancperso()" /> </td> <td><a type="submit" class="btn btn-outline-danger" name="critperso" href="{{ route("bilan.criteresperso.index", array($bilan->id, $anc->id)) }}">Vos critères</a></td> </tr> </tbody> </table>

Ce que je veux

que {id} et {anc} se remplissent corectement en fonction de l'id de chacun

Ce que j'obtiens

dans la route, {id} se remplit correctement mais {anc} reste toujours à 1 alors qu'il est censé changer en fonction de value="{{ $anc->id }}
http://localhost:8000/bilans/182/1/criteresperso/add

J'ai passé l'après-midi à chercher sans succès.... si quelqu'un voit où se trouve mon erreur ?
Merci d'avance !

6 réponses

Mardan, il y a 8 ans

essaie

<a type="submit" class="btn btn-outline-danger" name="critperso" href="{{ route("bilan.criteresperso.index", ['id'=>$bilan->id, 'anc'=>$anc->id ]) }}">Vos critères</a>
ginettebaldoche, il y a 8 ans

Malheureusement ça ne change rien...

ginettebaldoche, il y a 8 ans

personne pour me débloquer ?

yanis-git, il y a 8 ans

ça manque de précision, l'id Anc doit être statique depuis le backend ou dépend de ton formulaire et d'une entrée utilisateur ?

Si c'est le premier cas, alors la solution de @oghouz devrait fonctionner, si le problème subsiste, cela viens de ton backend qui récupère mal la donnée.

Si c'est le second cas, il te faut passer soit par un FORM soit par du js qui changera la cible de ton lien.

betaWeb, il y a 8 ans

Salut,

Vérifie que le paramètre de route dans ton URL soit bien nommé id, sinon Laravel ne pourra pas faire le match.

Yannick William Nchoutmboube, il y a 8 ans

Erreurs :
1- tu envois le formulaire par post mais tu cree une de type get donc forcement rien ne va marcher
2- tu met plusieurs bouttons de type "submit" dans ton formulaire pourtant le submit va toujour aller vers le
lien de l'attribut "action" du formulaire
3- met l'id du bilan dans un input hidden puis tu va le recuperer dans le controller
formulaire
4- explique clairement le fonctionnement de ton formulaire

<div class="card-block"> <form class="form-horizontal" method="post" action="{{ route('bilan.resultat.add' )}}" name="formu"> {{ csrf_field() }} <input type="hidden" name="bilanId" value="{{ $bilan->id }}"> <table class="table table-striped"> <thead> <tr> <th>Sexe</th> <th>Poids</th> <th></th> <th>Anc</th> </tr> </thead> <tbody class="text-primary"> <tr> <td><input id="sexe" size="7" maxlenght="3" name="valsexe" value="{{ $bilan->sexe }}"></td> <td><input size="7" maxlenght="3" name="valpoids" value="{{ $bilan->Poids_kg }}"></td> <td><input type="hidden" size="2" maxlenght="3" id="activite" name="valactivite" value="{{ $bilan->activite_mobile }}"></td> <td><input class="valeur" type="text" id="ancId" name="ancId" value="{{ $anc->id }}"></td> </tr> </table> </form> <table class="table table-sm"> <tbody> <tr> <!-- je ne pige pas pourquoi t'a jusqu'a 3 "submit" --> <td><a id="troubles" type="submit" class="btn btn-outline-success" name="troubles" value="troubles " href="{{ route("bilan.trouble.index", $bilan->id) }}">Troubles</a></td> <td> <input class="btn btn-outline-primary" type="submit" value="Vos apports" onclick="ancperso()" /> </td> <td><a type="submit" class="btn btn-outline-danger" name="critperso" href="{{ route("bilan.criteresperso.index", array($bilan->id, $anc->id)) }}">Vos critères</a></td> </tr> </tbody> </table>

la route

//larvel 5.2+ Route::post('bilans/criteresperso/add', 'CriterespersoController@index') ->name('bilan.criteresperso.index');

le controller

public function index(Request $request) { $bilan = Bilan::find($request->bilanId); $anc = Anc::find($request->ancId); $criterespersos = $bilan->criterespersos; return view('criterespersos.index', compact('criterespersos', 'bilan', 'anc')); }

notons que sur laravel on recupere les parametres envoyer par get ou par post facilement grace a la classe "REQUEST"