问题:缺少 [Route: ] 所需的参数

Issue with: Missing required parameters for [Route: ]

我非常困惑,但我认为这是我的一个非常简单的错误。

访问/admin/service时抛出异常:

Missing required parameters for [Route: admin.service.toggle.isFeatured] [URI: admin/service/toggle/isFeatured/{service}/{status}]. (View: C:\xampp\htdocs\cms\resources\views\admin\service\index.blade.php)

控制器: AdminServiceController.php

public function store(Request $request)
    {
      $data = $this->_validate($request);
      $data['creator_id'] = auth()->user()->id;
      Services::create($data);
      return redirect(route("admin.service.index"))->withSuccess("Die neue Leistung wurde hinzugefügt.");
    }

    public function toggleIsFeatured(Services $service,$status)
    {
      $service->update(["is_featured" => !$status]);
      redirect(back()->withSuccess('Status wurde erfolgreich geändert.'));
    }

    public function toggleIsActive(Services $service,$status)
    {
      $service->update(["is_active" => !$status]);
      redirect(back()->withSuccess('Status wurde erfolgreich geändert.'));
    }

    private function _validate($request) {
      $rules = [
        'title' => 'required|unique:services',
        'description' => 'required|min:100',
      ];
      return $this->validate($request, $rules);
    }

视图: index.blade.php

<a href="{{route('admin.service.toggle.isFeatured',[$service->id,$service->isFeatured])}}" class="btn btn-info btn-circle btn-sm"> @if($service->is_featured)<i class="fas fa-fw fa-star text-warning"></i> @else <i class="far fa-fw fa-star"></i> @endif</a>

<a href="{{route('admin.service.toggle.isActive',[$service->id,$service->isActive])}}" class="btn btn-info btn-circle btn-sm"><i class="fas fa-fw fa-circle @if($service->is_active) text-success @else text-danger @endif "></i></a>

路线: web.php

Route::prefix('admin')->group(function ()
 {
   Route::name('admin.')->group(function () {
     Route::middleware('auth')->group(function ()
     {
       Route::get('/', function ()
       {
        return view('admin');
        });
      Route::resource('service', 'App\Http\Controllers\AdminServiceController');
      Route::get('service/toggle/isFeatured/{service}/{status}', [App\Http\Controllers\AdminServiceController::class, 'toggleIsFeatured'])->name('service.toggle.isFeatured');
      Route::get('service/toggle/isActive/{service}/{status}', [App\Http\Controllers\AdminServiceController::class, 'toggleIsActive'])->name('service.toggle.isActive');
  });
  });
});

您可能应该将参数作为关联数组传递给 route 助手。虽然真正的问题是你试图通过的是 null.

考虑到您更新“特色”的查询正在使用字段 is_featured 您在模型 isFeatured 上尝试访问此字段时使用了错误的属性,该字段不存在,因此returns null.

route('admin.service.toggle.isFeatured', [
    'service' => $service->id,
    'status' => (int) $service->is_featured,
])

我将潜在的布尔值转换为一个整数,因此在 01 的 URL 中会实际放入一些东西。否则 false 将是一个空字符串,''.

对于您的“处于活动状态”的内容,这也是同样的问题。在模型上使用了错误的属性。