Laravel 5.8: 此路由不支持 POST 方法
Laravel 5.8: The POST method is not supported for this route
我在 Blade 有这样的表格:
@forelse($orders as $order)
<form method="POST" action="{{ route('orders.newprint', ['id'=>$order->id]) }}">
@csrf
<tr>
<td><input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order->ord_id }}"> </td>
<td>{{ $order->ord_id }}</td>
</tr>
@empty
<td colspan="7" class="text-center">Nothing to show</td>
@endforelse
<hr>
<label>Actions:</label>
<select class="form-control select2" name="actions" id="actions">
<option value="">Select...</option>
<option value="print_factors">Print Factors</option>
<option value="print_orders">Print Orders</option>
</select>
<button class="btn btn-primary float-left">Do</button>
</form>
我添加了这条路线:
Route::post('orders/newprint/{order}','OrdersController@prnpriview')->name('orders.newprint')->middleware('permission:shop-manage');
控制器的方法在这里:
public function prnpriview(Request $request, Order $order)
{
$checks = $request->input('orderCheck');
foreach($checks as $check){
dd($check);
}
}
但是我得到这个错误:
此路由不支持 POST 方法。支持的方法:GET、HEAD、DELETE。
我不知道为什么会显示这个,因为我指定了 POST 作为路由操作!
所以如果你知道如何解决这个问题,请告诉我...
提前致谢。
当您有另一条路线以该路线开始时,就会出现此问题,例如:
Route::post('orders/newprint/...
或同名
->name('orders.newprint')
而且是在想要的路由之后定义的。
澄清:在Laravel中,当定义了相同的路由名称时,只会采用最后一个...它作为数组键原则工作...如果将相同的键压入现有数组,您最后设置的将是正在使用的那个:
$array = [
'name' => 'route_name'
];
$array['name'] = 'some_different_name';
print_r($array);
// result
Array
(
[name] => some_different_name
)
要匹配的模式应以正斜杠开头:'/orders/newprint/{id}'
虽然我更愿意称它为:'/orders/{id}/print'
(个人喜好问题)。
在控制器中的操作 prnpriview()
中,您将 Order 对象放入参数中。您正在以表格形式发送订单 ID
变化
public function prnpriview(Request $request, Order $order)
至
public function prnpriview(Request $request, $order_id)
可能是您的路由方法有问题。
试试下面的东西。
<form method="POST" action="{{ route('orders.newprintv1', $order->id) }}">
直接在操作路由中提及 id 我们不需要为单个记录使用数组。
在路线中:
Route::post('orders/newprint/{order}','OrdersController@prnpriview')->name('orders.newprintv1')->middleware('permission:shop-manage');
更改路由名称orders.newprint确保任何其他路由名称与上面的名称不同你在route.php中写入路由检查所有路由在此之前。
可能是检查资源路由?用 orders/newprint.
定义任何路线
由于这也造成了问题。
还有一点需要确认,请在不做任何更改的情况下移动现有路线
使其成为 route.php 文件顶部的第一个,这是您的第一条路线。
然后检查它是否有效,然后其他路由与同名发生冲突。
这样使用
<form method="POST" action="{{ route('orders.newprint', $order->id) }}">
我在 Blade 有这样的表格:
@forelse($orders as $order)
<form method="POST" action="{{ route('orders.newprint', ['id'=>$order->id]) }}">
@csrf
<tr>
<td><input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order->ord_id }}"> </td>
<td>{{ $order->ord_id }}</td>
</tr>
@empty
<td colspan="7" class="text-center">Nothing to show</td>
@endforelse
<hr>
<label>Actions:</label>
<select class="form-control select2" name="actions" id="actions">
<option value="">Select...</option>
<option value="print_factors">Print Factors</option>
<option value="print_orders">Print Orders</option>
</select>
<button class="btn btn-primary float-left">Do</button>
</form>
我添加了这条路线:
Route::post('orders/newprint/{order}','OrdersController@prnpriview')->name('orders.newprint')->middleware('permission:shop-manage');
控制器的方法在这里:
public function prnpriview(Request $request, Order $order)
{
$checks = $request->input('orderCheck');
foreach($checks as $check){
dd($check);
}
}
但是我得到这个错误:
此路由不支持 POST 方法。支持的方法:GET、HEAD、DELETE。
我不知道为什么会显示这个,因为我指定了 POST 作为路由操作!
所以如果你知道如何解决这个问题,请告诉我...
提前致谢。
当您有另一条路线以该路线开始时,就会出现此问题,例如:
Route::post('orders/newprint/...
或同名
->name('orders.newprint')
而且是在想要的路由之后定义的。
澄清:在Laravel中,当定义了相同的路由名称时,只会采用最后一个...它作为数组键原则工作...如果将相同的键压入现有数组,您最后设置的将是正在使用的那个:
$array = [
'name' => 'route_name'
];
$array['name'] = 'some_different_name';
print_r($array);
// result
Array
(
[name] => some_different_name
)
要匹配的模式应以正斜杠开头:'/orders/newprint/{id}'
虽然我更愿意称它为:'/orders/{id}/print'
(个人喜好问题)。
在控制器中的操作 prnpriview()
中,您将 Order 对象放入参数中。您正在以表格形式发送订单 ID
变化
public function prnpriview(Request $request, Order $order)
至
public function prnpriview(Request $request, $order_id)
可能是您的路由方法有问题。
试试下面的东西。
<form method="POST" action="{{ route('orders.newprintv1', $order->id) }}">
直接在操作路由中提及 id 我们不需要为单个记录使用数组。
在路线中:
Route::post('orders/newprint/{order}','OrdersController@prnpriview')->name('orders.newprintv1')->middleware('permission:shop-manage');
更改路由名称orders.newprint确保任何其他路由名称与上面的名称不同你在route.php中写入路由检查所有路由在此之前。
可能是检查资源路由?用 orders/newprint.
定义任何路线由于这也造成了问题。
还有一点需要确认,请在不做任何更改的情况下移动现有路线 使其成为 route.php 文件顶部的第一个,这是您的第一条路线。
然后检查它是否有效,然后其他路由与同名发生冲突。
这样使用
<form method="POST" action="{{ route('orders.newprint', $order->id) }}">