2017-10-25 4 views
1

Ich benutze Slim 3 Framework als mein Backend und ein kleines selbstgeschriebenes Frontend (jQuery). In meinem Frontend habe ich Ajax-Befehle, um meinen REST-Server anzurufen. Jetzt habe ich das Problem, dass ich DELETE auf meinem Client nicht verwenden kann, weil es nicht die HTTP-Anfrage-Methode (GET) entspricht.Fehler in Slim 3 wegen Mismatch in Anfrage uri & Anfrage Methode

405 Method not allowed. Must be one of: GET, PUT 

Die offizielle Dokumentation sagte sagt sie standardmäßig nicht erlaubt ist:

If your Slim Framework application has a route that matches the current HTTP request URI but NOT the HTTP request method, the application invokes its Not Allowed handler and returns a HTTP/1.1 405 Not Allowed response to the HTTP client.

Jetzt konnte ich GET oder PUT verwenden, aber das ist nicht möglich, weil ich bereits diese Routen für andere Aktionen erklärt.

Slim Application Error: The application could not run because of the following error: Details Type: FastRoute\BadRouteException Message: Static route /api/v1/folders/ is shadowed by previously defined variable route /api/v1/folders/(.*) for method GET

// Folder routes 
$this->group('/folders', function() { 
    $this->get('[/{params:.*}]', 'FolderController:index'); 
    $this->post('', 'FolderController:create'); 
    $this->put('[/{params:.*}]', 'FolderController:update'); 
    $this->delete('/[/{params:.*}]', 'FolderController:delete'); 
})->add('AuthenticateMiddleware'); 

Könnten Sie bitte geben Sie mir einen Rat, wie dieses Problem zu lösen? Ist das nicht ein generelles Problem in der REST-Welt sozusagen, da ich denke, dass viele Frameworks wie Slim 3 funktionieren und einen 405 Method not allowed Fehler in einer bestimmten Situation werfen, in der du DELETE verwenden willst, aber nicht wegen des Klicks im Browser ist GET?

+0

Erfolgt die fehlgeschlagene Anfrage, wenn Sie auf einen Link klicken? ? Die Anfrage-Methode muss "DELETE" sein, damit Slim den richtigen Controller aufrufen kann. Beachten Sie auch, dass Ihre Löschroute einen zusätzlichen '' –

+1

@AlexandruUngureanu hat. Sie haben Adleraugen, weil nachdem ich '' '' ''entfernt hat, die Arbeit mit meinem Ajax' DELETE'. Bitte machen Sie einen kleinen Beitrag und ich werde Ihre Antwort akzeptieren! Vielen Dank! – Magiranu

Antwort

1

Per mein Kommentar:

Is the failing request happening when you click on a link? <a></a> ? The request method has to be DELETE in order for Slim to invoke the right controller. Also note that your delete route has an extra [

Viel Glück!