Laravel 5

2 Paramètres par URL/Controller [Laravel 5.2; Collective; Materialize]

  • Avatar de MakoubaSetho
    Membre depuis :
    16/10/2017
    Messages :
    6

    Bonjour à tous,
    Je me casse inutilement la tête depuis ce matin ...
    Je sent, je sais, que la solution est sûrement SIMPLE, et à portée de main ...
    Mais visiblement pas de la mienne pour le moment ^^"

    Mon besoin en simple :
    Récupérer 2 élements distincts dans une URL (dans mon controller) pour que ce dernier les associe.

    Ce que je veux : C'est associer un véhicule d'ID x à une Réservation d'ID y.

    Ma page de base dispose des deux ID, et c'est un tableau de tous les véhicules disponibles qui propose le bouton pour l'affecter à la réservation.
    Seulement, cette #é~éé de bouton n'accepte de me passer QUE l'ID du Vehicule, OU BIEN QUE l'ID de la Reservation suivant ce que je lui donne dans l'URL... Mais lorsque j'en mets 2, y à plus personne @_@.

    J'ai essayé des trucs tels que de passer mes 2 paramètres en tableau dans l'URL :

    //Le Bouton :
    <a href="{{url('/admin/reservation/putVehicule', ['id_veh' => $unVehicule->id, 'id_res' => $lareservation->id])}}"></a>

    Mais cela donne une erreur ... :

    1/1 NotFoundHttpException in RouteCollection.php line 161:

    in RouteCollection.php line 161
    at RouteCollection->match(object(Request)) in Router.php line 821
    at Router->findRoute(object(Request)) in Router.php line 691
    at Router->dispatchToRoute(object(Request)) in Router.php line 675
    at Router->dispatch(object(Request)) in Kernel.php line 246
    at Kernel->Illuminate\Foundation\Http{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    at Pipeline->Illuminate\Routing{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
    at CheckForMaintenanceMode->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
    at Pipeline->then(object(Closure)) in Kernel.php line 132
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
    at Kernel->handle(object(Request)) in index.php line 53

    Pourtant, la route de la fonction et le controller où elle est définie existe bien :

    //La Route :
    Route::resource('admin/reservation/putVehicule', 'ReservationController@putVehicule'); //Affecter un Vehicule à la Demande
    //ReservationController :
    // Affecter le Vehicule choisi à la demande
    public function putVehicule($id_veh, $id_res)
    {
    $tcheck = "ok";
    dd($tcheck);

    }

    J'ai également essayé de passer un Formulaire autour de mon bouton d'envois...
    De lui donner mes paramètres comme des Inputs, et de les retrouver avec "$request->input('nom-du-parametre');"
    Mais pour une raison que j'ignore, la fonction du Controller plante dès que je lui place l'objet de requête et reviens sur la page initiale sans changements..
    Je précise avoir bien créer mes fichiers de requêtes, et qu'ils fonctionnaient jusque là.
    Je concidère qu'on doit UPDATE la Reservation afin de la liée au véhicule choisit, donc je demande un "PUT", avec l'ID de la Reservation.

    <!-- Le Formulaire -->
    <div class="row">
    {{ Form::open(array('url' => '/admin/reservation/giveVehicule/'.$lareservation->id, 'method' => 'put')) }}
    {!! csrf_field() !!}
    <div class="row">
    <fieldset>
    <legend><i class="material-icons left">loyalty</i><strong><u>Test</u></strong></legend>
    <div class="input-field col s12">
    <input name="id_veh" id="id_veh" type="text" class="validate" value="{{$unVehicule->id}}">
    <label for="id_veh">ID_VEH :</label>
    </div>

    <div class="input-field col s12">
    <input name="id_res" id="id_res" type="text" class="validate" value="{{$lareservation->id}}">
    <label for="id_res">ID_RES :</label>
    </div>
    <br/>
    </fieldset>
    <div class="row">
    <div class="input-field col s12">
    <button class="btn waves-effect waves-dark green darken-1" type="submit" name="action">TEST <i class="material-icons right">event_available</i></button>
    </div>
    </div>
    </div>
    </form>
    </div>
    //La Route :
    Route::resource('admin/reservation/giveVehicule', 'ReservationController@giveVehicule');
    //Affecter un Vehicule à la Demande
    //ReservationController :
    // Affecter le Vehicule choisi à la demande
    public function giveVehicule($id, ReservationRequest $request)
    {
    $lareservation = Reservation::find($id);
    $verif = $request->input('id_veh');
    dd($verif);
    //$lareservation->vehicule()->associate($request->input('id_veh')); //Associate : Association de l'ID du Véhicule récupéré dans le Formulaire avec "vehicule_id" dans Reservation

    try
    {
    $lareservation->save(); //On sauvegarde la reservation
    $request->session()->flash('success', "La Réservation " . $lareservation->id . ", à bien été Modifiéée !!"); //Message de Confirmation

    return view('admin.pages-admin.reservations-admin.showReservationAll');
    }
    catch(\Exception $e) //Si ca ne passe pas : Erreur
    {
    var_dump($e->errorInfo);

    $request->session()->flash('error', "Une Erreur est Survenue lors de l'Édition de la Réservation : " . $lareservation->id); //Message d'Erreur Bug

    return view('admin.pages-admin.reservations-admin.showReservation');

    }
    }

    Et bien sûr, si j'essaie de plutôt tenter une requête de Vehicule (VehiculeRequest) où de placer les deux IDs dans l'URL du formulaire me donne les mêmes problèmes....

    Quelqu'un se sentirait-il de m'aider à désemêller cette affaire ? =)

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1950

    Bonjour,

    Pour créer des routes pour une ressource la syntaxe doit être dans ce genre :

    Route::resource('vehicule', 'ReservationController');
  • Avatar de Sàyn
    Membre depuis :
    10/11/2015
    Messages :
    47

    Bonjour,
    il faut que tu passes des paramètres à ta route

    Route::get('admin/reservation/putVehicule/{idvehicule}/{idreservation}', 'ReservationController@putVehicule');
  • Avatar de MaitrePylos
    Membre depuis :
    27/05/2013
    Messages :
    148

    Pour résumer ce que dit @bestmomo et @Sàyn

    ta route :
    Route::resource('admin/reservation/giveVehicule', 'ReservationController@giveVehicule');
    est incorecte et ne peux pas fonctionner. Tu mélanges un peu le tout.

    la resource va générer automtiquement les routes pour des méthodes dans un controller basé sur le format API Rest.
    Je te renvoie sur la doc officielle : Resource

    la route proposé par @Sàyn

    Route::get('admin/reservation/putVehicule/{idvehicule}/{idreservation}', 'ReservationController@putVehicule');

    va ammener directement sur la méthode putVehicule du controller réservation Et dans ton code tu doit l'adapter comme ceci

    <a href="{{url('/admin/reservation/putVehicule', [ $unVehicule->id, $lareservation->id])}}"></a>

    En espérant que cela soit clair :)

  • Avatar de MakoubaSetho
    Membre depuis :
    16/10/2017
    Messages :
    6

    Super clair !
    Merci beaucoups !
    C'est vrai que j'ai tendance à un peu tout mélanger ^^'
    Je ferais des efforts à l'avenir !

Vous ne pouvez pas répondre à ce sujet.