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

时间:2020-10-02 03:34:59

标签: laravel routes laravel-8

我感到非常困惑,但是我希望这是一个非常简单的错误。

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

缺少[Route:admin.service.toggle.isFeatured] [URI:admin / service / toggle / isFeatured / {service} / {status}]所需的参数。 (查看: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');
  });
  });
});

1 个答案:

答案 0 :(得分:0)

您可能应该将参数作为关联数组传递给route帮助器。尽管您尝试传递的实际问题是null

考虑到您的查询要更新“具有功能”,使用字段is_featured试图在模型isFeatured上访问该属性时使用了错误的属性,该属性不存在,因此返回{ {1}}。

null

我将此强制布尔值转换为整数,以便在该段route('admin.service.toggle.isFeatured', [ 'service' => $service->id, 'status' => (int) $service->is_featured, ]) 0上实际放入URL。否则1将为空字符串false

对于您的“活跃”内容,这是同样的问题。在模型上使用错误的属性。