Проблема: отсутствуют обязательные параметры для [Route:]

#laravel #routes #laravel-8

#laravel #маршруты #laravel-8

Вопрос:

Я сильно запутался, но я ожидаю, что это действительно простая ошибка с моей стороны.

При посещении /admin/service выдается это исключение:

Отсутствуют обязательные параметры для [Route: admin.service.toggle.isFeatured] [URI: admin/service /toggle/isFeatured/{service}/{status}] . (Просмотр: C:xampphtdocscmsresourcesviewsadminserviceindex.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', 'AppHttpControllersAdminServiceController');
      Route::get('service/toggle/isFeatured/{service}/{status}', [AppHttpControllersAdminServiceController::class, 'toggleIsFeatured'])->name('service.toggle.isFeatured');
      Route::get('service/toggle/isActive/{service}/{status}', [AppHttpControllersAdminServiceController::class, 'toggleIsActive'])->name('service.toggle.isActive');
  });
  });
});
  

Комментарии:

1. вы должны передавать эти параметры в виде ассоциативного массива помощнику маршрута, ['service' => ..., 'status' => ...] и эти параметры не могут быть null

2. Попробуйте передать значение для привязки следующим образом {{ route('admin.service.toggle.isFeatured',['service' => $service->id,'status' => $service->isFeatured]) }}

3. @WaytoDeveloper та же проблема: отсутствуют обязательные параметры

4. @lagbox та же проблема: (

5. Спасибо, ребята, теперь это работает как шарм!

Ответ №1:

Вероятно, вам следует передавать параметры в виде ассоциативного массива route помощнику. Хотя реальная проблема заключается в том, что вы пытаетесь передать, это null .

Учитывая, что ваш запрос на обновление «is featured» использует поле is_featured , в котором вы используете неправильный атрибут при попытке доступа к нему в модели, isFeatured , которого не существует, поэтому возвращается null .

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

У меня есть это приведение потенциального логического значения к целому числу, поэтому в URL-адресе в этом сегменте будет что-то, что действительно нужно вставить, 0 или 1 . В противном false случае будет пустая строка, '' .

Это та же проблема, что и для вашего «активного» материала. Использование неправильного атрибута в модели.