php - 缺少必需的参数
问题描述
[Route: admin.status-order.update] [URI: admin/status-order/{status_order}] [缺少参数:status_order] 缺少必需参数。
我不明白错误在哪里,这是我的控制器:
public function show(Order $order)
{
$data = DB::table('order_menu')
->join('menus', 'menus.id', '=', 'order_menu.menu_id')
->join('orders', 'orders.id', '=', 'order_menu.order_id')
->select('orders.*', 'menus.name', 'order_menu.quantity')
->where('orders.id', $order->id)
->get();
return view('admin.status-order.edit')->with([
'order' => $order,
'data' => $data,
]);
}
public function update(Request $request, Order $order)
{
$order->status = $request->status;
$order->save();
return redirect()->route('admin.status-order.index');
}
对于 edit.blade.php :
<form action="{{ route('admin.status-order.update', $order) }}" method="POST">
@csrf
{{ method_field('PUT') }}
<h6 style="text-align: center; font-size: 18px">Order #{{ $order->order_number }}</h6>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" required value="">
</div>
</div>
<button type="submit" class="btn btn-secondary" style="margin-top: 20px; width: 100%">Submit</button>
</form>
对于路线:
Route::namespace("App\Http\Controllers\Admin")->prefix("admin")->name("admin.")->middleware('can:adminpage')->group(function () {
Route::resource("/status-order", OrderStatusController::class);
});
解决方案
你可以试试这段代码。您有资源路由和更新方法所需$id
的参数。我已将一个id
参数传递给您的视图并在form
操作中使用。请参阅下面的代码
show
函数有参数,但我有新的参数称为id
。
public function show(Order $order)
{
.
.
.
return view('admin.status-order.edit')->with([
'order' => $order,
'data' => $data,
'id' => $order->id
]);
}
用于输入标签id
中的form
动作和设置order->status
值。见下面的代码
<form action="{{ route('admin.status-order.update', $id) }}" method="POST">
@csrf
{{ method_field('PUT') }}
......
......
<div class="col-sm-10">
<input type="text" class="form-control" name="status" id="name" required value="{{ $order->status }}">
</div>
</div>
<button type="submit" class="btn btn-secondary" style="margin-top: 20px; width: 100%">Submit</button>
</form>
现在,当您提交表单时,update
方法将根据资源路由获取$id
参数并更新您的表格。
public function update(Request $request, $id)
{
try {
Order::where('id', $id)->update(['status' => $request->status]);
return redirect()->route('admin.status-order.index');
} catch (\Throwable $th) {dd($th->__toString());
throw $th;
}
}
但在你的情况下status_order
没有找到。因此,您必须设置一条新路线并传递一个 params status_order
。见下文
Route::put('/status-order-update/{status_order}', OrderStatusController@update)->name('status.order.update');
.
更新方法会像public function update(Request $request, $statusOrder)
Form
在刀片就像action={{ route('status.order.update', ['status_order' => $order->status])}}
。
如果有帮助,请发表评论。
推荐阅读
- c# - .Net Core 2.1 Identity - 参考错误
- python - 将 JSON 字符串映射到 PySpark 中的结构
- php - jcrop - 轮次选择结果
- javascript - 我是编码新手。我需要一个快速的解释
- nhibernate - Nhibernate高效级联删除
- firebase - 缺少 firebase_core/FirebaseCorePlugin.h
- css - 我应该如何使我身体的整个背景变暗?
- docker - Filebeat 不会将日志发送到 ELK docker stack 上的 logstack
- wordpress - 挂钩添加到购物车方法以执行自定义功能之前
- ruby-on-rails - 基于活动记录数据库查询更改类,在rails循环中使用link_to?