web-dev-qa-db-ja.com

RouteCollection.php行219のMethodNotAllowedHttpException

投稿を保存するとこのエラーが発生します

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日にこれを把握することはできません。

15
zlotte

投稿の更新時にメソッドを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');
9
Jeff Lambert

あなたのモデルに追加してみてください:protected $guarded = ['_token'];

1
PawelW

私の場合、末尾に余分な「/」がありました。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が初めてなので、上記のいずれよりも優れた他のアプローチがあるかもしれません!

0
Nick F

フォームタグを確認してください

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

ここでは "/ path /"は "/ path"である必要があり、最後に "/"を使用しないでください。

0
Ahmet Uğur

Vendor/laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.phpに移動し、関数isReading()method内に目的のルートメソッド(POST、GET)を追加します。

これが誰かを助けることを願っています。

0
srivat1