laravel: После вызова update ресурсного контроллера белый экран
Проект использует фреймворк laravel. Проблема состоит в следующем: создан ресурсный контроллер, создан шаблон blade, в шаблоне расположена форма. Пытаюсь вызвать маршрут update, появляется белый экран. Отладка показала, что не происходит вход в метод update. В методе update сейчас только код вывода на экран передаваемых параметров для отладки, т.к. до метода update дело не доходит.
Подскажите, в чем может быть причина?
<form action="{{route('settings.update', $settings->all())}}" class="form">
@csrf
@method('PUT')
<input type="text" name="{{$settings[0]->name}}" value="{{$settings[0]->name}}">
<button type="submit" class="btn btn-primary">
Обновить
</button>
</form>
Метод update
public function update(Request $request, $id)
{
dd($id);
dd($request);
return redirect()->route('settings.index');
}
Маршрут:
Auth::routes();
Route::get('/', function () {
return view('index');
});
Route::resource('/settings', 'SettingsController');
Ответы (2 шт):
Ищи тут:
route('settings.update', $settings->all())
Маршрут settings.update имеет вид: /settings/{id}. То есть, вторым параметром надо передать идентификатор изменяемого объекта. А ты передаешь $settings->all().
Подозреваю, что ты собираешься изменять значения всех настроек в одной форме. И вообще не собираешься как-либо работать с каждой из настройкой по отдельности (то есть, не будет странички для отображение только одной настройки, не будет странички для редактирования только одной настройки, не будет удаления какой-либо настройки).
В таком случае, тебе не нужен ресурсный контроллер. Просто сделай пару маршрутов:
Route::get('/settings', 'SettingsController@edit')->name('settings.edit');
Route::put('/settings', 'SettingsController@update')->name('settings.update');
Тогда для формирования значения action будет достаточно route('settings.update').
Resources создают роуты вида:
Route::prefix('settings')->group(function () {
Route::get('/', 'SettingsController@index');
Route::post('/', 'SettingsController@store');
Route::prefix('{id}')->group(function () {
Route::put('/', 'SettingsController@update');
Route::delete('/', 'SettingsController@destroy');
});
});
Соответственно, чтобы достучаться до нужного тебе роута Update, надо лезть в settings/ и методом отправки PUT
В Вашем конкретном случае route('settings/{id}') достаточно, так как метод PUT в Laravel сам поймет что это update;