【问题标题】:The PATCH method is not supported for this route此路由不支持 PATCH 方法
【发布时间】:2021-07-10 13:59:37
【问题描述】:

我找不到问题,我想将数据更新到数据库,但我得到 Patch 方法不支持。我找不到问题,我从书本上检查了没有不同,但在这种情况下无法运行更新。

这是我的 web.php

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('laravel/data', 'LaravelController@listData')->name('laravel.data');
Route::resource('laravel', 'LaravelController');

这是我的控制器

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    $laravel = Laravel::find($id);
    $laravel = $request['id'];
    $laravel->tanggal_pemasangan = $request['tanggal'];
    $laravel->pitstop = $request['pitstop'];
    $laravel->merk_ban = $request['merk_ban'];
    $laravel->no_series_ban = $request['series_ban'];
    $laravel->jenis_mobil = $request['jenis_mobil'];
    $laravel->plat_nomor = $request['plat_mobil'];
    $laravel->posisi_ban = $request['posisi_ban'];
    $laravel->status = $request['status'];
    $laravel->update();
}

我的form.blade

<form class="form-horizontal" data-toggle="validator" method="POST">
        @method('POST')
        @csrf

还有我的 ajax

$('#modal-form form').validator().on('submit', function(e){
            if(!e.isDefaultPrevented()){
                var id = $('#id').val();
                if(save_method == "add") url = "{{ route('laravel.store') }}"
                else url = "laravel/"+id;
                $.ajax({
                    url : url,
                    type: "POST",
                    data: $('#modal-form form').serializa(),
                    success : function(data){
                        $('#modal-form form').modal('hide');
                        table.ajax.reload();
                    },
                    error: function(){
                        alert("Tidak dapat menyimpan data!");
                    }
                });
                return false;
            }
        });
function editForm(id){
        save_method = "edit";
        $('input[name = _method]').val('PATCH');
        $('#modal-form form')[0].reset();
        $.ajax({
            url : "laravel/"+id+"/edit",
            type: "GET",
            dataType: "JSON",
            success: function(data){
                $('#modal-form').modal('show');
                $('.modal-title').text('Edit Data');

                $('#id').val(data.id);
                $('#tanggal').val(data.tanggal_pemasangan);
                $('#pitstop').val(data.pitstop);
                $('#merk_ban').val(data.merk_ban);
                $('#series_ban').val(data.no_series_ban);
                $('#jenis_mobil').val(data.jenis_mobil);
                $('#plat_mobil').val(data.plat_nomor);
                $('#posisi_ban').val(data.posisi_ban);
                $('#status').val(data.status);
            },
            error: function(){
                alert("Tidak dapat menampilkan data!");
            }
        });
    }

每次我想更新,总是给我错误405这个方法不支持

【问题讨论】:

  • php artisan view:clearphp artisan route:clear之后再试一次
  • @sta 不行,结果还是一样

标签: php ajax laravel


【解决方案1】:

验证您的服务器是否支持 HTTP 请求:“PUT”。

在您的blade.php 文件中,在表单中添加@method('put')

<form method="POST">
        @method('PUT')
        @csrf
        ...
</form>

考虑到资源类型控制器会为您生成路由,或许您应该使用php artisan route:list 命令检查更新路由参数。

为资源类型控制器生成路由的一些示例,here

现在可能是路由层次结构问题,尝试像这样更改路由的顺序。

Route::resource('laravel', 'LaravelController');
Route::get('laravel/data', 'LaravelController@listData')->name('laravel.data');

【讨论】:

  • 如果我改变路线的顺序,我的路线将忽略 laravel.data。我认为我的按钮提交功能存在问题,因为我检查了我的网络,它不是对 laravel/id 的请求,而是仅在没有 id 的情况下对 laravel 的请求
  • 在这种情况下,也许您应该考虑重命名您的路线以避免这种复杂情况。
【解决方案2】:
Route::resource() #update method uses PATCH|PUT verb instead of POST

在您的情况下,您使用 POST 方法,因此请求将不兼容,您需要在您的 ajax 类型或必要时在表单中使用 PATCHPUT 而不是 POST

【讨论】:

  • 但是,在不同的项目中,我使用相同的代码和方法没有问题
猜你喜欢
  • 2020-04-23
  • 2020-08-06
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 2020-04-11
  • 2021-09-09
相关资源
最近更新 更多