簡體   English   中英

Laravel:Route::resource() GET & POST 工作,但 PUT & DELETE 拋出 MethodNotAllowedHttpException

[英]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/fooproject.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"> 

檢查https://laravel.com/docs/5.6/routing#form-method-spoofing

只需在表單中添加一個隱藏的輸入字段

    <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM