首页 > 解决方案 > 缺少必需的参数

问题描述

[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);
 });

标签: phphtmllaravel

解决方案


你可以试试这段代码。您有资源路由和更新方法所需$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])}}

如果有帮助,请发表评论。


推荐阅读