投稿を保存するとこのエラーが発生します
MethodNotAllowedHttpException in RouteCollection.php line 219:
この問題の原因は何ですか?
Routes.php:
Route::get('home', 'PostsController@index');
Route::get('/', 'PostsController@index');
Route::get('index', 'PostsController@index');
Route::get('posts', 'PostsController@index');
Route::get('post/{slug}/{id}', 'PostsController@show');
Route::get('posts/sukurti-nauja-straipsni', 'PostsController@create');
Route::patch('posts/store-new-post', 'PostsController@store');
Route::get('post/{slug}/{id}/edit', 'PostsController@edit');
Route::patch('posts/{slug}', 'PostsController@update');
Route::get('tags/{tags}', 'TagsController@show');
Route::get('categories/{categories}', 'CategoriesController@show');
// Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');
私はLaravel 5.1を使用していますが、1日にこれを把握することはできません。
投稿の更新時にメソッドをpatch
に設定しているため、そのメソッドを使用するには フォームを開く を確認してください:
{!! Form::open(['method' => 'patch']) !!}
Form
クラスを使用していない場合は、フォームの下に 非表示要素_method
があることを確認することもできます。
<input name="_method" type="hidden" value="PATCH">
同様に、AJAX経由でこのデータを送信する場合は、POST経由でリクエストを送信する前に、_method
キーを'PATCH'
に設定されたペイロードに追加するだけです。一部のブラウザ( IE 7/8 )は、XMLHttpRequestを介したPATCH HTTPをサポートしていません
他のオプションは、代わりにPOST dataを受け入れるようにルートを変更することです:
Route::post('posts/store-new-post', 'PostsController@store');
Route::post('posts/{slug}', 'PostsController@update');
あなたのモデルに追加してみてください:protected $guarded = ['_token'];
私の場合、末尾に余分な「/」がありました。POST/api/clients /私はそれを削除して機能しました:POST =/api/clients
私もこの問題を抱えていましたが、私の場合は、これらの複数のルートが同じコントローラーアクションに設定されていることが原因であることが判明しました。
Route::get('/', 'PostsController@index');
Route::get('posts', 'PostsController@index');
これはGETリクエストではうまくいきましたが、フォームを自分自身に送信するように設定しました。フォームでアクションを指定していませんでした。つまり、/posts
を使用していれば機能しました(そのルートに適切なPOSTエンドポイントを設定したため)しかし、ホームページ/
からは、説明したMethodNotAllowedHttpExceptionが常に表示されます(POSTそのために設定されたデータルートがなかったため)。このフォームは時々機能するように思われました。
最後に、/
のルートを次のようにリダイレクトに変更することで修正しました。
Route::get('/', function(){
return redirect('posts');
});
...フォームにアクションを明示的に設定する(または/
のPOSTルートも設定する)]ことでも仕事ができたと思いますが。
私はLaravelが初めてなので、上記のいずれよりも優れた他のアプローチがあるかもしれません!
フォームタグを確認してください
<form action="/path/" method="post">
ここでは "/ path /"は "/ path"である必要があり、最後に "/"を使用しないでください。
Vendor/laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.phpに移動し、関数isReading()method内に目的のルートメソッド(POST、GET)を追加します。
これが誰かを助けることを願っています。