#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
случае будет пустая строка, ''
.
Это та же проблема, что и для вашего «активного» материала. Использование неправильного атрибута в модели.