首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复“此路由不支持GET方法。受支持的方法:PUT。”

如何修复“此路由不支持GET方法。受支持的方法:PUT。”
EN

Stack Overflow用户
提问于 2019-05-10 19:57:18
回答 2查看 7.8K关注 0票数 4

当我提交更新某些数据的请求时,我会得到以下错误:“此路由不支持get方法。受支持的方法:PUT。”怎么摆脱这个?

在这里,我添加了web.php、AdminController.php和JS函数的代码来填充datatable。

路由:

代码语言:javascript
复制
Route::group(['prefix' => '/admins'], function () {
    Route::get('/show', [
        'uses' => 'AdminController@show',
        'as'   => 'admins.show',
    ]);

    Route::put('/approve/{id}',     [
        'uses' => 'AdminController@approve',
        'as'   => 'admins.approve',
    ]);
});

AdminController:

代码语言:javascript
复制
public function show()
{
    return Datatables::of(User::query()->whereNotNull('email_verified_at'))->make(true);
}

public function approve(Request $request, $id)
{
    $user = User::find($id);
    $user->approved_by = Auth::user()->name;
    $user->approved_at = new \DateTime();

    $user->save();

    return redirect('/admins/show');
} 

数据表函数:

代码语言:javascript
复制
$(function () {
    $('#admins').DataTable({
        processing: true,
        serverSide: true,
        autoWidth: true,
        scrollX: true,
        order: [[1, "asc"]],
        pagingType: "full_numbers",
        ajax: '{{ url('admins/ show') }}',
        columns: [
            { data: 'id', name: 'id' },
            { data: 'name', name: 'name' },
            { data: 'email', name: 'email' },
            { data: 'email_verified_at', name: 'email_verified_at' },
            { data: 'approved_by', name: 'approved_by' }
        ],
        columnDefs: [
            {
                targets: 0,
                visible: false,
                searchable: false
            },
            {
                targets: 5,
                render: function (data, type, row, meta) {
                    if (row.approved_by === null) {
                        return "<form action=\"/admins/approve/" + row.id + "\" method=\"put\"><input type=\"submit\" class=\"btn btn-success\" value=\"Approve\"></form><button type=\"button\" class=\"btn btn-danger\">Delete</button>";
                    } else {
                        return "<button type=\"button\" class=\"btn btn-primary\">Reject</button><button type=\"button\" class=\"btn btn-danger\">Delete</button>";
                    }
                },
                className: "col-action",
                searchable: false,
                orderable: false
            }
        ]
    });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-10 20:03:14

PUT这样的HTTP谓词通常不受need服务器的支持,Laravel使用方法欺骗实现了这一点,因此您需要传递一个输入type=hidden,指定要使用的方法。而您的表单操作也需要出于同样的原因“发布”。

代码语言:javascript
复制
 return "<form action=\"/admins/approve/" + row.id + "\" method=\"POST\">
               <input type=\"hidden\" name=\"_method\" value=\"PUT\">"

还要确保您正在传递带有POST请求的csrf令牌

<input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\">"

票数 2
EN

Stack Overflow用户

发布于 2019-05-10 20:21:40

  1. 在laravel中,您需要发送一个带有值_method (不区分大小写的)的密钥PUT,以便能够告诉laravel您正在用put方法发送请求。更多信息
  2. 因为您的路由是在web.php中,而且您的方法不是GET,所以您需要发送一个带有请求的csrf令牌。发送一个值为csrf令牌的密钥_token。默认情况下,可以对所有$.ajax请求执行此操作。使用代码。

在您的呈现方法中进行这些更改,您就可以继续了。

代码语言:javascript
复制
render: function(data, type, row, meta) {
  if (row.approved_by === null) {
    return "<form action=\"/admins/approve/" + row.id + "\" method=\"post\"><input type=\"hidden\" name=\"_method\" value=\"PUT\"><input type=\"submit\" class=\"btn btn-success\" value=\"Approve\"></form><button type=\"button\" class=\"btn btn-danger\">Delete</button>";
  } else {
    return "<button type=\"button\" class=\"btn btn-primary\">Reject</button><button type=\"button\" class=\"btn btn-danger\">Delete</button>";
  }
},

我没有包含发送csrf令牌的代码。您可以使用链接对整个应用程序执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56084086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档