2017-08-06 7 views
1

J'essaye d'employer la méthode de détruire de Laravel (5.3) pour supprimer un objet quand j'appuie sur un bouton, cependant j'obtiens une MethodNotAllowedHttpException.Laravel 5.3 delete méthode donne methodNotAllowed avec spoofing

Mon itinéraire est

Route::delete('/admin/add/{id}', '[email protected]'); 

La méthode destroy est

public function destroy($id) 
{ 
    $items = Item::where('id', $id)->get(); 
    foreach ($items as $item) 
     $item->delete(); 
    return redirect('/admin/add'); 
} 

Ma forme est

<form action="{{ url('admin/add/'.$specific->id)}}" method="POST"> 
    {{ method_field('DELETE') }} 
    {{ csrf_field() }} 
    <div class="modal-footer no-border"> 
    <button type="submit" class="btn btn-primary">Delete</button> 
    </div> 
</form> 

J'ai vérifié les routes existantes (php itinéraire artisan: liste), et l'un montre:

DELETE | admin/add/{id} |   | App\Http\Controllers\[email protected] 

L'erreur que je reçois est

in RouteCollection.php line 218 
at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'POST')) in RouteCollection.php line 205 
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD', 'POST')) in RouteCollection.php line 158 
at RouteCollection->match(object(Request)) in Router.php line 766 
at Router->findRoute(object(Request)) in Router.php line 621 
at Router->dispatchToRoute(object(Request)) in Router.php line 607 
at Router->dispatch(object(Request)) in Kernel.php line 268 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104 
at Pipeline->then(object(Closure)) in Kernel.php line 150 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117 
at Kernel->handle(object(Request)) in index.php line 53 
at require('/Users/username/Sites/blades/public/index.php') in server.php line 133 

les instructions de routage Laravel, j'utilise une forme et usurper l'action SUPPRIMER en utilisant une méthode POST, mais je suis toujours faire une exception. Toute aide serait appréciée.

NOTE: J'ai suivi l'exemple complet à https://laravel.com/docs/5.2/quickstart-intermediate, et cela fonctionne parfaitement bien. Mes tentatives pour recréer ceci dans un projet différent sont ce qui cause le problème.

+0

Pouvez-vous vérifier le code HTML généré? On dirait que votre formulaire renvoie une demande POST après tout. –

+0

Il semble envoyer une demande POST. J'ajoute une mise à jour ci-dessus parce que j'ai trouvé quelque chose d'assez étrange. – abe678

Répondre

0

J'ai trouvé le problème. La page sur laquelle se trouvait ce formulaire comportait un formulaire POST différent et j'avais fermé le formulaire avec un </div> plutôt qu'un </form>. Pour cette raison, il essayait de soumettre les deux formulaires en même temps, et les appels POST étaient contradictoires.

0

S'il vous plaît vérifier ce $specific->id n'est pas nul, comme dd($specific->id), après ouvrir la console de développeur dans votre navigateur et ouvrir la page réseau, et vérifiez quelle URL est correcte.

+0

J'ai vérifié, et $ specific-> id n'est certainement pas nul. – abe678