【问题标题】:Missing required parameter缺少必需的参数
【发布时间】:2021-06-12 12:55:28
【问题描述】:

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

【问题讨论】:

  • 分享您的路线文件。您正在以action 的形式发送Order 的对象。我猜你的路线需要和字符串或整数。
  • @Jayant 我已将路线添加到我的问题中
  • 您是否尝试添加{{ route('admin.status-order.update', ['status_order' =&gt; $order-&gt;status_order) }}` 和方法update($status_order)。您能否提及或更新您的'admin.status-order.update' 路线。您正在使用资源控制器并更新使用 PUT/PATCH 方法并且需要一个参数。请参阅文档laravel.com/docs/8.x/controllers#resource-controllers
  • @Jayant 我已经按照你的建议尝试过,但仍然出现同样的错误
  • @aufa 请运行命令php artisan route:list 并粘贴/status-order 资源路由

标签: php html laravel


【解决方案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  
    ]);
}

form 操作中使用id 并在输入标签中设置order-&gt;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)-&gt;name('status.order.update');.

更新方法类似于public function update(Request $request, $statusOrder)

刀片中的Form 类似于action={{ route('status.order.update', ['status_order' =&gt; $order-&gt;status])}}

如果有帮助请评论。

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 2021-11-05
  • 2018-10-28
  • 2018-12-01
  • 2016-06-29
  • 2018-06-20
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多