Laravel 不接受 POST 方法

Laravel not accepting POST Method

我一直在尝试向我的按钮添加路由,据此我已将方法声明为 POST,但是当我单击该按钮时,出现错误提示说它正在使用 GET 方法。

这是我的看法

<form method="post" action="{{route('admin.order.item.edit.action', [$order])}}">
..
..
<table class="table m-l-sm">
                            <tbody>
                                @foreach($order->packages as $item)
                                
                                <tr>
                                    <td>
                                        <p class="m-b-xxs font-bold">{{$item->name}}</p>
                                        @foreach($item->products as $product)
                                        <p class="m-b-xxs">{{$product->name}} X {{$product->pivot->quantity}}</p>
                                        @endforeach

                                        <div class="form-group row m-t-sm">
                                            <div class="col-md-4">
                                                <div class="input-group d-inline">
                                                    <span class="input-group-addon font-bold">RM {{$item->unit_price}}</span>
                                                    <span class="input-group-addon">X</span>
                                                    <input id="" type="number" class="form-control" name="package[{{$item->id}}][qty]" value="{{!empty($order->packages->where('id', $item->id)->first()) ? $order->packages->where('id', $item->id)->first()->getOriginal('pivot_quantity') : 0}}" min="0" placeholder="Qty" @cannot('edit-order-package', $order) disabled @endcannot>                                                    
                                                </div>
                                            </div>@error('package.'.$item->id)
                                            <div class="col-md-12 alert alert-danger">{{ $message }}</div>
                                            @enderror
                                                <div class="col-md-8 d-flex justify-content-end">
                                                    <a class="btn btn-sm btn-danger btn-danger" href="{{route('admin.order.item.edit.delete', [$item->id])}}" >Delete</a>  <--- where i am calling my route
                                                </div>
                                        </div>
                                    </td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
</form>

这是我的路线

  Route::post('/{order}/edit/delete', 'App\OrderController@handleDeleteItemOrder')->name('admin.order.item.edit.delete');

控制器

public function handleDeleteItemOrder(Order $order){
            log:info($order);
        }

blade:

<a class="btn btn-sm btn-danger btn-danger js-delete-item" data-item="{{ $item->id }}">Delete</a>

javascript

var deleteBtns = document.getElementsByClassName('js-delete-item');
function deleteItem(id) {
    fetch('/{order}/edit/delete/' + id, {
        method: 'POST' // or 'DELETE'
    });
}
for (var deleteBtn of deleteBtns) {
    deleteBtn.addEventListener('click', deleteItem.bind(deleteBtn.dataset.item));
}

路线:

Route::post('/{order}/edit/delete/{id}', 'App\OrderController@handleDeleteItemOrder')->name('admin.order.item.edit.delete'); // or
Route::delete('/{order}/edit/delete/{id}', 'App\OrderController@handleDeleteItemOrder')->name('admin.order.item.edit.delete');

link总是发送 GET 请求

所以你必须更换按钮link

<a class="btn btn-sm btn-danger btn-danger" href="{{route('admin.order.item.edit.delete', [$item->id])}}" >Delete</a>  <--- where i am calling my route

有了这个

<form type="POST" action="{{route('admin.order.item.edit.delete', [$item->id])}}">
    @csrf
    @method('delete') <--- I prefer delete method in delete if you don't want you can escape this but if you added it you have to change the post request to delete request
    <input type="submit" class="btn btn-sm btn-danger btn-danger">Delete</input>
</form>

在途中

Route::delete('/{order}/edit/delete/{id}', 'App\OrderController@handleDeleteItemOrder')->name('admin.order.item.edit.delete');