2015-09-25 8 views
13

Wenn ich einen Beitrag zu speichern Ich erhalte diesen FehlerMethodNotAllowedHttpException in RouteCollection.php Linie 219

MethodNotAllowedHttpException in RouteCollection.php line 219: 

Was dieses Problem verursachen kann ??

routes.php:

Route::get('home', '[email protected]'); 
Route::get('/', '[email protected]'); 
Route::get('index', '[email protected]'); 

Route::get('posts', '[email protected]'); 
Route::get('post/{slug}/{id}', '[email protected]'); 
Route::get('posts/sukurti-nauja-straipsni', '[email protected]'); 
Route::patch('posts/store-new-post', '[email protected]'); 
Route::get('post/{slug}/{id}/edit', '[email protected]'); 
Route::patch('posts/{slug}', '[email protected]'); 


Route::get('tags/{tags}', '[email protected]'); 
Route::get('categories/{categories}', '[email protected]'); 

// Authentication routes... 
Route::get('auth/login', 'Auth\[email protected]'); 
Route::post('auth/login', 'Auth\[email protected]'); 
Route::get('auth/logout', 'Auth\[email protected]'); 

// Registration routes... 
Route::get('auth/register', 'Auth\[email protected]'); 
Route::post('auth/register', 'Auth\[email protected]'); 

Ich verwende Laravel 5.1 und ich kann dies für einen Tag nicht herausfinden ..

+0

Dies geschieht, wenn Sie etwas per Post senden und zu versuchen, sie zu holen, indem zu erhalten oder umgekehrt. – patricio

Antwort

8

Da Sie auf der Post-Update des Verfahrens sind Einstellung sein patch sicher, dass Sie open your form diese Methode verwenden:

{!! Form::open(['method' => 'patch']) !!} 

Wenn Sie nicht die Form Klasse verwenden, können Sie auch sicherstellen, nur gibt es eine hidden element called _method unter der Form:

<input name="_method" type="hidden" value="PATCH"> 

Und falls Sie diese Daten über AJAX senden, fügen Sie einfach einen _method Schlüssel für die zu 'PATCH' gesetzt Nutzlast, bevor die Anforderung über POST senden. Einige Browser (IE 7/8) nicht PATCH HTTP durch XMLHttpRequest unterstützen

Die andere Option ist die Route zu ändern POST-Daten zu akzeptieren, statt:

Route::post('posts/store-new-post', '[email protected]'); 
Route::post('posts/{slug}', '[email protected]'); 
+0

Ich bin mit dem gleichen Problem meines Servers konfrontiert. Aber auf meinem lokalen Server funktioniert es gut. Unter Verwendung von L5.1 habe ich Patch nicht bereits verwendet Post-Methode über Ajax. Jede Hilfe –

+0

Diese Antwort nur merke mir, dass ich manchmal nur eine dumme Person bin. Hahaha! Ich verwende POST, aber auf meiner Route habe ich vergessen, Route :: post() anstelle von Route :: get() zu verwenden. – Jonjie

0

Ich war zu diesem Problem, aber in meinem Fall ist es gedreht um sich durch diese mehrere Routen zum selben Controller-Aktion eingerichtet mit:

Route::get('/',  '[email protected]'); 
Route::get('posts', '[email protected]'); 

Diese für GET-Anfragen funktionierte gut, aber ich würde meine Form auf sich – dh vorzulegen. Ich hatte keine Aktion auf meinem Formular – angegeben, was bedeutete, dass, wenn ich auf /posts war, es funktionierte (seit ich einen entsprechenden POST-Endpunkt für diese Route eingerichtet hatte), aber von der Homepage / würde es mir immer die MethodNotAllowedHttpException geben die Sie beschreiben (weil dafür keine POST-Datenroute eingerichtet wurde). Es hat ewig gedauert, herauszufinden, warum die Form manchmal funktioniert und manchmal nicht.

Am Ende fixierte ich es durch die Route für / in eine Umleitung zu ändern, wie folgt aus:

Route::get('/', function(){ 
    return redirect('posts'); 
}); 

... obwohl ich ausdrücklich denke, eine Aktion auf der Formular-Einstellung (oder einen POST-Routeneinstellausdruck für / auch) hätte den Job auch getan.

Ich bin neu in Laravel, also könnte es andere Ansätze geben, die besser sind als die beiden oben genannten!

0

Navigieren Sie zu vendor/laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.php und fügen Sie die gewünschte Routenmethode (POST, GET) in der Funktion isReading() - Methode hinzu.

Hoffe, das kann jemand helfen.

+0

Dies ist ein Teil von Laravel, Sie wollen nicht damit herumspielen. Laravel 5.3 hat diese Datei an einen anderen Ort verschoben (Hersteller/Laravel/Framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php). –

0

Prüfen Sie die Formular-Tag

<form action="/path/" method="post"> 

hier "/path/" sollte "/path" sein, verwenden Sie nicht "/" am Ende.

1

Versuchen Sie, Sie Modell ergänzt: protected $guarded = ['_token'];

Verwandte Themen