J'écris une API webservice (dans laravel 4.2).
Pour une raison quelconque, le routage vers l'un de mes contrôleurs échoue de manière sélective en fonction de la méthode HTTP.
Mon routes.php ressemble à:
Route::group(array('prefix' => 'v2'),
function()
{
Route::resource('foo', 'FooController',
[ 'except' => ['edit', 'create'] ]
);
Route::resource('foo.bar', 'FooBarController',
[ 'except' => ['show', 'edit', 'create'] ]
);
}
);
Ainsi, lorsque j’essaie l’une des méthodes GET/POST/PUT/PATCH/DELETE pour laproject.dev/v2/foo
ou project.dev/v2/foo/1234
urls, tout fonctionne parfaitement.
Mais, pour une raison quelconque, seuls GET et POST fonctionnent pour project.dev/v2/foo/1234/bar
. Les autres méthodes jettent simplement un 405 (MethodNotAllowedHttpException).
(fyi, j'émets des demandes via l'extension Advanced Rest Client Chrome.)
Que se passe-t-il?
Qu'est-ce que je rate?
Résolu!
La réponse peut être trouvée en exécutant php artisan routes
.
Cela m'a montré que DELETE et PUT/PATCH attendent un identifiant de barre.
J'ai négligé cela car il ne peut y avoir qu'un seul de ce type particulier de "barre". La solution facile consiste simplement à l'ajouter à mon URL, peu importe, comme project.dev/v2/foo/1234/bar/5678
.
Pour ceux qui utilisent les versions de Laravel> 4.2, utilisez ceci:
php artisan route:list
Cela vous donnera la liste des routes définies dans votre application. Vérifiez si les itinéraires pour PUT et DELETE sont autorisés dans vos itinéraires ou non . 405 erreur est principalement parce qu'il n'y a pas d'itinéraire pour ces méthodes.
Je ne connais pas les anciennes versions Laravel. Mais j'utilise Laravel depuis 5.2 et il est nécessaire d'inclure une méthode cachée lors de l'utilisation de put, patch ou delete.
Ex:
<input type="hidden" name="_method" value="PUT">
Vérifiez https://laravel.com/docs/5.6/routing#form-method-spoofing