[英]Laravel: Route::resource() GET & POST work, but PUT & DELETE throw MethodNotAllowedHttpException
我正在編寫一個網絡服務 API(在 laravel 4.2 中)。
出於某種原因,到我的一個控制器的路由基於 HTTP 方法有選擇地失敗。
我的 routes.php 看起來像:
Route::group(array('prefix' => 'v2'),
function()
{
Route::resource('foo', 'FooController',
[ 'except' => ['edit', 'create'] ]
);
Route::resource('foo.bar', 'FooBarController',
[ 'except' => ['show', 'edit', 'create'] ]
);
}
);
所以,當我嘗試任何 GET / POST / PUT / PATCH / DELETE 方法時
project.dev/v2/foo
或project.dev/v2/foo/1234
網址,一切正常。
但是,出於某種原因,只有 GET 和 POST 對project.dev/v2/foo/1234/bar
。 其他方法只是拋出 405 (MethodNotAllowedHttpException)。
(僅供參考,我通過Advanced Rest Client Chrome 擴展發出請求。)
這是怎么回事?
我錯過了什么?
解決了!
可以通過運行php artisan routes
找到答案。
這向我展示了 DELETE 和 PUT/PATCH 期望(需要)一個欄 ID。
我碰巧忽略了這一點,因為這種特殊類型的“酒吧”只能有一種。 簡單地修復它,只需將其添加到我的 URL 中即可,例如project.dev/v2/foo/1234/bar/5678
。
對於使用 Laravel 版本 > 4.2 的用戶,請使用:
php artisan route:list
這將給出在您的應用程序中設置的路由列表。 檢查您的路線中是否允許 PUT 和 DELETE 的路線。 405錯誤主要是因為這些方法沒有路由。
我不知道舊的 Laravel 版本。 但是我從 5.2 開始使用 Laravel,並且在使用 put、patch 或 delete 時需要包含一個隱藏的方法輸入。
前任:
<input type="hidden" name="_method" value="PUT">
只需在表單中添加一個隱藏的輸入字段
<input type="hidden" name="_method" value="PUT">
並將表單方法保留為帖子
<form method="post" action="{{action('')}}">
如果您想在提交表單中使用 PUT 方法,請查看此鏈接https://laravel.com/docs/5.6/routing#form-method-spoofing
但是,如果您在項目中使用 ajax,則必須執行以下操作:
<form>
@method('PUT')
// your_element
在您的腳本中添加:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: {{ route('your_route', ':id') }},
type: 'POST',
data: data,
dataType: 'json',
cache: false,
}).done(function(data,status){
// anything
}).fail(function(){
// anything
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.