it-swarm.com.de

Fehler 405 (Methode nicht zulässig) Laravel 5

Ich versuche, eine POST -Anforderung mit jQuery auszuführen, erhalte jedoch die Fehlermeldung 405 (Methode nicht zulässig). Ich arbeite mit Laravel 5

Das ist mein Code:

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() !!}

Regler

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

Der Jquery-Fehler lautet http: //localhost/laravel5.1/public/empresas/eliminar/5 405 (Methode nicht zulässig).

Der URL-Wert ist 

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

und der Datenwert ist 

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

Wenn ich zu $.get request wechsle, funktioniert es gut, aber ich möchte eine Post-Anfrage machen.

Kann mir jemand helfen?

Vielen Dank.

BEARBEITEN!!

Route

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => '[email protected]']);
27
German Ortiz

Die Ausnahme methodNotAllowed gibt an, dass für die angeforderte HTTP-Methode keine Route vorhanden ist. 

Ihr Formular ist so eingerichtet, dass es eine DELETE-Anforderung ausgibt. Daher muss Ihre Route Route::delete() verwenden, um diese Anforderung zu erhalten.

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => '[email protected]'
]);
34
Jeemusu

Die Datei routes.php muss korrekt eingerichtet sein.

Ich gehe davon aus, dass Ihr aktuelles Setup so ist:

Route::post('/empresas/eliminar/{id}','[email protected]');

oder so. Definieren Sie stattdessen eine Route für die Löschmethode.

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

Wenn Sie jetzt eine Routenressource verwenden, lautet der Standard-Routenname, der für die 'DELETE'-Methode verwendet werden soll, .destroy. Definieren Sie stattdessen Ihre Löschlogik in dieser Funktion.

6
davsp

Wenn Sie die resource routes verwenden, können Sie im HTML-Body des Formulars method_field helper wie folgt verwenden:

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

Es wird eine verborgene Formulareingabe mit dem Methodentyp erstellt, der von Laravel 5.5+ korrekt interpariert wird.

Seit Laravel 5.6 können Sie folgende Blade-Anweisungen in den Vorlagen verwenden:

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

Ich hoffe, dass dies in Zukunft jemandem helfen kann.

0
mdy

Dies könnte jemandem helfen, also werde ich meine Eingaben auch hier setzen.

Ich bin auf das gleiche (oder ein ähnliches) Problem gestoßen. Anscheinend war das Problem, dass die POST Anfrage von Modsec nach den folgenden Regeln blockiert wurde: 350147, 340147, 340148, 350148

Nachdem ich die Anfrage blockiert hatte, wurde ich auf den gleichen Endpunkt umgeleitet, aber natürlich als GET-Anfrage und damit auf die 405.

Ich habe diese Regeln auf die Whitelist gesetzt und voila, der 405-Fehler war weg.

Hoffe das hilft jemandem.

0
Paolo

Wenn die Methode delete in form verwendet wird, muss die Route gelöscht werden

Route::delete("empresas/eliminar/{id}", "[email protected]");
0
Mahbubul Alam