@ilya17392

Какой путь прописать в роуте update, чтоб попасть на страницу с формой обновления?

Роуты
Route::get('/edit/{id}', 'AdController@edit')->name('adEdit');

Route::get('/edit/{id}', 'AdController@update')->name('adUpdate');

Выдает ошибку SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: update `ad` set `title` = ?, `description` = ?, `author_name` = momomo, `user_id` = 27, `ad`.`updated_at` = 2019-08-24 18:42:31 where `id` = 48) , потому что не направляет на страницу с формой обновления записи
Форма из файла update.blade.php:
<form method="post" class="col-md-6" action="{{ route(‘update’, $oneAd->id) }}">

     <div class="form-group">
         <label>Title</label>
         <input  type="text" name="title" class="form-control">
         @error ('title')
         <small class="form-text text-danger">{{ $message }}</small>
         @enderror
     </div>
     <div class="form-group">
         <label>Description</label>
         <textarea type="text" name="description" class="form-control"></textarea>
         @error ('description')
         <small class="form-text text-danger">{{ $message }}</small>
         @enderror
     </div>
     <button type="submit" class="btn btn-primary">Save</button>
     @csrf
 </form>

Методы контроллера:
public function edit($id)
    {
        $ad = Ad::find($id);
        
        return view('update', [
            'ad' => $ad
            ]);
    }

    
    public function update(Request $request, $id)
    {
        
        
        $oneAd = Ad::find($id);
         
       $id = $oneAd->update([
        'title' => $request->title,
        'description' => $request->description,
        'user_id' => Auth::user()->id,
        'author_name' => Auth::user()->username
        
       ])->id;
        return redirect("/");
    }

и кнопка на странице показа объявлений
<a href="/edit/{{ $oneAd->id }}" class="btn btn-primary">Update</a>

после нажатия на которую сразу запись сохраняется, но не переходит на страницу с формой
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@3gsxarakiri
Пытаюсь разобраться в этом гемморое
У вас оба роута имеют одинаковый путь, поэтому срабатывает последний (он перезаписал первый).
Для решения проблемы первому припишите следующий uri - /edit/{id}/update
И все заработает
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Комментировать
Еще как вариант изменить метод для update

Route::patch('/edit/{id}', 'AdController@update')->name('adUpdate');


И в форме вставте @method('PATCH')

Такой способ как по мне, самый правильный, так как отвечает логики
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы