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');
我一直在尝试向我的按钮添加路由,据此我已将方法声明为 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');