web-dev-qa-db-ja.com

エラー405(許可されていないメソッド)Laravel 5

JQueryでPOST要求を実行しようとしていますが、エラー405(メソッドは許可されていません)を取得しています。Laravel 5で作業しています

これは私のコードです:

jQuery

<script type="text/javascript">
    $(document).ready(function () {
        $('.delete').click(function (e){
            e.preventDefault();
            var row = $(this).parents('tr');
            var id = row.data('id');
            var form = $('#formDelete');
            var url = form.attr('action').replace(':USER_ID', id);
            var data = form.serialize();
            $.post(url, data, function (result){
                alert(result);
            });
        });
    });
    </script>

HTML

{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}

    {!!Form::close() !!}

コントローラ

public function delete($id, \Request $request){
        return $id;
    }

Jqueryエラーは http://localhost/laravel5.1/public/empresas/eliminar/5 405(Method Not Allowed)です。

Url値は

http://localhost/laravel5.1/public/empresas/eliminar/5

データ値は

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

$.getリクエストに変更した場合、問題なく動作しますが、ポストリクエストをしたいです。

誰も私を助けることができますか?

ありがとう。

編集!!

ルート

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);
33
German Ortiz

methodNotAllowed例外は、要求しているHTTPメソッドのルートが存在しないことを示します。

フォームはDELETEリクエストを行うように設定されているため、ルートはRoute::delete()を使用してこれを受信する必要があります。

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => 'CompaniesController@delete'
]);
44
Jeemusu

Routes.phpファイルを正しく設定する必要があります。

現在の設定は次のようになっています:

Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');

か何か。代わりに、deleteメソッドのルートを定義してください。

Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');

Routeリソースを使用している場合、「DELETE」メソッドに使用されるデフォルトのルート名は.destroyです。代わりに、その関数で削除ロジックを定義します。

7
davsp

resource routesを使用している場合、フォームのHTML本文では、次のようにmethod_field helperを使用できます。

<form>
  {{ csrf_field() }}
  {{ method_field('PUT') }}
  <!-- ... -->
</form>

Laravel 5.5+によって正しく挿入されたメソッドタイプの非表示フォーム入力を作成します。

Laravel 5.6以降では、テンプレートで次のBladeディレクティブを使用できます。

<form>
  @method('put')
  @csrf
  <!-- ... -->
</form>

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

0

これは誰かを助けるかもしれないので、私もここに私の入力を入れます。

同じ(または同様の)問題に遭遇しました。どうやら、問題はPOSTリクエストが次のルールによってModsecによってブロックされたことでした:350147、340147、340148、350148

リクエストをブロックした後、同じエンドポイントにリダイレクトされましたが、もちろんGETリクエストとして、したがって405としてリダイレクトされました。

それらのルールと出来事をホワイトリストに登録しましたが、405エラーはなくなりました。

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

0
Paolo

フォームでメソッド削除を使用する場合、ルート削除を設定する必要があります

Route::delete("empresas/eliminar/{id}", "CompaniesController@delete");
0
Mahbubul Alam