2014-11-19 18 views
9

Sto scrivendo un'API webservice (in laravel 4.2).
Per qualche motivo, l'instradamento verso uno dei miei controllori ha esito negativo in modo selettivo in base al metodo HTTP.Laravel: Route :: resource() GET e POST funzionano, ma PUT & DELETE lancia MethodNotAllowedHttpException

mio routes.php assomiglia:

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

Così, quando provo qualsiasi GET/POST/PUT/PATCH/cancellare i metodi per le
project.dev/v2/foo o project.dev/v2/foo/1234 gli URL, tutto funziona perfettamente.

Ma, per qualche motivo, solo GET e POST funzionano per project.dev/v2/foo/1234/bar. Gli altri metodi generano solo un 405 (MethodNotAllowedHttpException).
(FYI, sto inviando richieste tramite l'estensione avanzato Resto client Chrome.)

Cosa sta succedendo?
Cosa mi manca?

+0

Forse la tua API supporta solo 'currentproject.dev/v2/companies/legalname/1234 /'? – silkfire

risposta

14

Risolto!
La risposta può essere trovata eseguendo php artisan routes.

Questo mi ha mostrato che DELETE e PUT/PATCH prevedono (richiedono) un ID di barra.
Mi è capitato di trascurare questo perché non ci può essere uno di questo particolare tipo di "barra". La facile soluzione è semplicemente aggiungerlo al mio URL, a prescindere, come project.dev/v2/foo/1234/bar/5678.

6

Per quelli che utilizzano le versioni laravel> 4 uso questo:

php artisan route:list 

Questo darà l'elenco dei percorsi stabiliti nell'applicazione. Controlla se le rotte per PUT e DELETE sono consentite nei percorsi o no. 405 errore è principalmente perché non esiste un percorso per questi metodi.

+0

Leggermente fuorviante dal '4.2> 4';) – Luke

Problemi correlati