2014-11-19 6 views
9

Ich schreibe eine Webservice-API (in Laravel 4.2).
Aus irgendeinem Grund schlägt das Routing zu einem meiner Controller basierend auf der HTTP-Methode selektiv fehl.Laravel: Route :: Ressource() GET & POST arbeiten, aber PUT & DELETE werfen MethodNotAllowedHttpException

Mein routes.php wie folgt aussieht:

Route::group(array('prefix' => 'v2'), 
    function() 
    { 
     Route::resource('foo', 'FooController', 
      [ 'except' => ['edit', 'create'] ] 
      ); 
     Route::resource('foo.bar', 'FooBarController', 
      [ 'except' => ['show', 'edit', 'create'] ] 
      ); 
    } 
); 

Also, wenn ich versuche, jede von GET/POST/PUT/PATCH/DELETE-Methoden für den
project.dev/v2/foo oder project.dev/v2/foo/1234 Urls, alles funktioniert perfekt.

Aber aus irgendeinem Grund arbeiten nur GET und POST für project.dev/v2/foo/1234/bar. Die anderen Methoden werfen nur eine 405 (MethodNotAllowedHttpException).
(FYI, ich Anfragen über die erweiterte REST-Client Chrome-Erweiterung Ausgabe.)

Was ist los?
Was fehlt mir?

+0

Vielleicht unterstützt Ihre API nur 'currentproject.dev/v2/companies/legalname/1234 /'? – silkfire

Antwort

14

Gelöst!
Die Antwort kann durch Ausführen von php artisan routes gefunden werden.

Das zeigte mir, dass DELETE und PUT/PATCH eine Bar ID erwarten (erfordern).
Ich habe das vernachlässigt, weil es nur einen dieser besonderen Art von "Bar" geben kann. Die einfache Lösung, es einfach zu meinen URLs hinzufügen, wie project.dev/v2/foo/1234/bar/5678.

6

Für diejenigen, die diese Laravel Versionen> 4 Gebrauch verwenden:

php artisan route:list 

Dies wird die Liste von Routen in der Anwendung festgelegt geben. Überprüfen Sie, ob Routen für PUT und DELETE in Ihren Routen erlaubt sind oder nicht. 405 Fehler ist meistens, weil es keine Route für diese Methoden gibt.

+0

Leicht irreführend seit '4.2> 4';) – Luke