缺少必需的参数

时间:2021-06-12 12:55:28

标签: php html laravel

<块引用>

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

1 个答案:

答案 0 :(得分:-1)

你可以试试这个代码。您有资源路由和更新方法需要 $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 未找到。因此,您必须设置一条新路线并传递一个参数 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])}}

如果有帮助,请评论。