2017-10-04 2 views
-1

Hey je travaille sur un code dans lequel lorsque l'utilisateur clique sur le bouton de mise à jour, il ira à une autre page qui est doctorEdit. J'ai défini l'itinéraire dans mon fichier web mais c'est encore et encore donnant une route d'erreur non définie. Quelqu'un peut-il m'aider s'il vous plaît à résoudre mon problème. Voici mon code.Route non définie même si je l'ai définie

Code Route:

Route::resource('doctor/doctorEdit','[email protected]'); 

Code contrôleur

<?php 

    namespace App\Http\Controllers; 

    use Illuminate\Http\Request; 
    use Illuminate\Support\Facades\DB; 
    use App\Http\Controllers\Controller; 

    class DoctorController extends Controller 
     { 
    public function edit() 
     { 
    return view('doctor.doctorEdit'); 
     } 
    } 

Et mon code de la vue est

<form class="row" method="POST" action="#" onsubmit = "return confirm('Are you sure?')"> 
        <input type="hidden" name="_method" value="DELETE"> 
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
        <a href="{{ route('doctor/doctorEdit', ['id' => $doctor->id]) }}" class="btn btn-warning col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
        Update 
        </a> 
        <button type="submit" class="btn btn-danger col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
         Delete 
        </button> 
       </form> 

S'il vous plaît laissez-moi savoir ce que je fais mal parce que je suis nouveau à Laravel .

enter image description here

Répondre

3

Essayez d'utiliser la méthode GET avec un itinéraire nommé.

Votre routefile

Route::get('doctor/doctorEdit','[email protected]')->name('doctor.edit'); 

Votre code de vue

<form class="row" method="POST" action="#" onsubmit = "return confirm('Are you sure?')"> 
        <input type="hidden" name="_method" value="DELETE"> 
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
        <a href="{{ route('doctor.edit', ['id' => $doctor->id]) }}" class="btn btn-warning col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
        Update 
        </a> 
        <button type="submit" class="btn btn-danger col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
         Delete 
        </button> 
       </form> 
+0

Thanx a résolu mon problème –

+0

Grand, heureux de vous aider – zuif

+0

s'il vous plaît accepter la réponse si elle est résolue @NidaAkram – Cowgirl

0

vous définissez une ressource. La bonne façon de le faire est:

Route::resource('doctor','DoctorController'); 

Le nom de la méthode SUPPRIMER est doctor.destroy, et la méthode du contrôleur est destroy

Votre code de la vue doit être

 <form class="row" method="POST" action="{{ route('doctor.delete') }}" onsubmit = "return confirm('Are you sure?')"> 
       <input type="hidden" name="_method" value="DELETE"> 
       <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
       <a href="{{ route('doctor.edit', ['id' => $doctor->id]) }}" class="btn btn-warning col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
       Update 
       </a> 
       <button type="submit" class="btn btn-danger col-sm-3 col-xs-5 btn-margin" style="width:100px; margin-left:20px;"> 
        Delete 
       </button> 
      </form> 
+0

Le but est de modifier un médecin, pas le supprimer. – Desh901

+0

Vous avez un formulaire pour supprimer un médecin et un lien pour modifier un médecin. L'itinéraire pour la suppression d'un médecin est appelé «doctor.destroy» et celui pour l'édition d'un médecin est «doctor.edit». –

+0

Oh vous avez raison, je n'ai pas vu la méthode DELETE dans le formulaire, je supprime le downvote quand SO me le fera, mon erreur, désolé EDIT: je ne peux pas annuler la downvote sauf si vous éditez la question – Desh901

1

Vous faites mal, jetez un oeil à la documentation sur Resource Controllers.

Fondamentalement, si vous définissez une ressource avec la méthode Route::resource(), vous ne devez pas spécifier l'action du contrôleur, puisque le contrôleur des ressources devrait fournir des méthodes REST compatibles.

Donc, si vous voulez créer un contrôleur de ressources REST vous devez indiquer votre itinéraire:

Route::resource('doctor', 'DoctorController'); Vous devez donc spécifier uniquement le nom de votre classe de contrôleur.

Ensuite, dans votre contrôleur, vous devez spécifier les méthodes requises:

class DoctorController extends Controller 
{ 

    public function index() 
    { 
     // GET yourapp.com/doctor -> typically return all doctors 
    } 

    public function create() 
    { 
     // GET yourapp.com/doctor/create -> typically show doctor creation form 
    } 

    public function show() 
    { 
     // GET yourapp.com/doctor/{doctor_id} -> show a single doctor 
    } 

    public function store() 
    { 
     // POST yourapp.com/doctor -> create a new doctor 
    } 

    public function edit() 
    { 
     // GET yourapp.com/doctor/{doctor_id}/edit -> show edit form view 
     return view('doctor.doctorEdit'); 
    } 

    public function update() 
    { 
     // PUT|PATCH yourapp.com/doctor/{doctor_id} -> update a doctor 
    } 

    public function destroy() 
    { 
     // DELETE yourapp.com/doctor/{doctor_id} -> delete a doctor 
    } 

} 

Si vous voulez juste exposer la forme edit sans la logique REST utiliser la méthode Request::get():

Request::get('doctor/doctorEdit', '[email protected]')->name('doctor.edit');

Si vous mettez en cache vos itinéraires n'oubliez pas de les rafraîchir en utilisant la séquence de commande artisanale

php artisan route:clear 
php artisan route:cache 

ou de façon plus concise que php artisan route:cache