Функция обновления Laravel не запускает правильный ответ
Когда я пытаюсь обновить запись в моем приложении Laravel, он запускает неправильный URL, вызывая ошибку 404. Эта функция работала нормально, когда я разрабатывал локально, однако теперь она размещена на сервере one.com, она перестала работать.
edit.blade.php
<form method="POST" action="gins/{{ $gins->id }}">
@method('PATCH')
@csrf
<div class="field">
<label class="label" for="gin">Gin</label>
<div class="control">
<input type="text" class="input" name="gin"
placeholder="Gin" value="{{ $gins->gin }}">
</div>
</div>
<div class="field">
<label class="label" for="size">Bottle Size(ml)</label>
<div class="control">
<input type="text" class="input" name="size"
placeholder="Size (ml)" value="{{ $gins->size }}">
</div>
</div>
<div class="field">
<label class="label" for="price">Price(£)</label>
<div class="control">
<input type="text" class="input" name="price"
placeholder="Price of Gin" value="{{ $gins->price }}">
</div>
</div>
<div class="field">
<div class="control">
<button type="submit" class="button is-success">Update Record
</button>
</div>
</div>
</form>
маршрут
Route::patch('gins/{gin}', 'PostsController@update')->middleware('auth');
Auth::routes();
контроллер
public function update(Request $request, $id)
{
$gins = \App\Gins::findOrFail($id);
$gins->gin = request('gin');
$gins->size = request('size');
$gins->price = request('price');
$gins->save();
return redirect('gins');
}
URL для страницы редактирования Laravel/gins/7/edit
, Когда я нажимаю кнопку отправки, он возвращает URL Laravel/gins/7/gins/7
когда он должен быть перенаправлен обратно в Laravel/gins/7
,
7
в URL есть запись id
из конкретной записи, которую я пытаюсь обновить.
1 ответ
Это всегда плохая идея - жестко кодировать URL-адреса. Следующие
<form method="POST" action="gins/{{ $gins->id }}">
на маршруте, как laravel/gins/
оценил бы laravel/gins/gins/7
,
Кроме того, маршруты все время меняются в динамическом веб-приложении. По этой причине я бы предложил вам использовать именованные маршруты. Например:
Route::patch('gins/{gin}', 'PostsController@update')
->middleware('auth')
->name('posts.update');
а затем измените действие формы на это:
<form method="POST" action="{{ route('posts.update', ['gin' => $gins->id]) }}">
Я бы тоже убрал твои update()
метод немного.
public function update(Request $request, $id)
{
$gins = \App\Gins::findOrFail($id);
$gins->gin = request('gin');
$gins->size = request('size');
$gins->price = request('price');
$gins->save();
// change this to a named route as well
return redirect('gins');
// or if you just want to return back to the previous page, you can do
// return back();
}