2014-11-19 15 views
9

Piszę API usługi sieciowej (w wersji 4.2a).
Z jakiegoś powodu routing do jednego z moich kontrolerów jest selektywnie nieudany w oparciu o metodę HTTP.Laravel: Route :: resource() GET & POST działa, ale PUT & DELETE throw MethodNotAllowedHttpException

Moja routes.php wygląda następująco:

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

Tak więc, gdy próbuję dowolnego GET/POST/PUT/patch/DELETE Metody
project.dev/v2/foo lub project.dev/v2/foo/1234 adresów URL, wszystko działa idealnie.

Jednak z jakiegoś powodu tylko GET i POST pracują dla project.dev/v2/foo/1234/bar. Inne metody po prostu rzucają 405 (MethodNotAllowedHttpException).
(FYI, jestem wydawanie wniosków za pośrednictwem przedłużenie zaawansowane Reszta Client Chrome).

Co się dzieje?
Czego mi brakuje?

+0

Może twój interfejs API obsługuje tylko 'currentproject.dev/v2/companies/legalname/1234 /'? – silkfire

Odpowiedz

14

Rozwiązany!
Odpowiedź można znaleźć, uruchamiając php artisan routes.

To pokazało mi, że DELETE i PUT/PATCH oczekują (wymagają) identyfikatora paska.
Zdarzyło mi się to zaniedbywać, ponieważ może istnieć tylko jeden z tego rodzaju "paska". Łatwo to naprawić, aby po prostu dodać go do mojego adresu URL, niezależnie, tak jak project.dev/v2/foo/1234/bar/5678.

6

Dla tych, którzy korzystają laravel wersje> 4 Użyj tego:

php artisan route:list 

To da listę tras zawartych w aplikacji. Sprawdź, czy trasy dla PUT i DELETE są dozwolone na twoich trasach, czy nie. Błąd 405 wynika głównie z braku trasy dla tych metod.

+0

Lekko wprowadzające w błąd od "4.2> 4";) – Luke