Я изо всех сил пытаюсь обновить данные в базе данных с помощью формы редактирования и не могу найти в Интернете ничего, что соответствовало бы логике моей настройки.
У меня есть кнопка добавления, кнопка удаления и кнопка редактирования. Добавление и удаление работают, но при редактировании данные не обновляются.
Любая помощь будет оценена по достоинству, так как я безуспешно пробовал несколько методов.
Заранее спасибо.
Вид:
@extends('layouts.app')
@section('content')
<div class = "container flex-center">
<div class = "row col-md-8 flex-column">
<h1>Edit a link</h1>
@foreach ($links as $link)
<form action = "{{ url('link/'.$link->id) }}" method = "POST">
{!! csrf_field() !!}
@method('PUT')
@if ($errors->any())
<div class = "alert alert-danger" role = "alert">
Please fix the following errors
</div>
@endif
<h3 class = "edit-link-title">{{ $link->title }}</h3>
{!! csrf_field() !!}
<div class = "form-group{{ $errors->has('title') ? ' has-error' : '' }}">
<label for = "title">Title</label>
<input type = "text" class = "form-control" id = "title" name = "title" placeholder = "Title" value = "{{ $link->title }}">
@if ($errors->has('title'))
<span class = "help-block">{{ $errors->first('title') }}</span>
@endif
</div>
<div class = "form-group{{ $errors->has('url') ? ' has-error' : '' }}">
<label for = "url">Url</label>
<input type = "text" class = "form-control" id = "url" name = "url" placeholder = "URL" value = "{{ $link->url }}">
@if ($errors->has('url'))
<span class = "help-block">{{ $errors->first('url') }}</span>
@endif
</div>
<div class = "form-group{{ $errors->has('description') ? ' has-error' : '' }}">
<label for = "description">Description</label>
<textarea class = "form-control" id = "description" name = "description" placeholder = "description">{{ $link->description }}</textarea>
@if ($errors->has('description'))
<span class = "help-block">{{ $errors->first('description') }}</span>
@endif
@endforeach
</div>
<button type = "submit" class = "btn btn-default submit-btn">Submit</button>
</form>
</div>
</div>
@endsection
веб-контроллер / контроллер маршрута:
use Illuminate\Http\Request;
Route::post('/submit', function (Request $request) {
$data = $request->validate([
'title' => 'required|max:255',
'url' => 'required|url|max:255',
'description' => 'required|max:255',
]);
$link = tap(new App\Link($data))->save();
return redirect('/');
});
use App\Link;
Route::delete('/link/{link}', function (Link $link) {
// Link::destroy($link);
$link->delete();
return redirect('/');
});
Route::PUT('/link/{link}', function (Link $link) {
$link->update();
return redirect('/');
});






В качестве шаблона проектирования часто рекомендуется отделить контроллер от маршрутов. Причина, по которой ваше редактирование не обновляется, заключается в том, что вы не предоставляете модели данные из запроса: -
Route::PUT('/link/{link}', function (Request $request, Link $link) {
$request->validate([
'title' => 'required|max:255',
'url' => 'required|url|max:255',
'description' => 'required|max:255',
]);
$link->update($request->all());
return redirect('/');
});
В контроллере вы можете абстрагироваться от логики проверки до вспомогательной функции проверки, чтобы избежать дублирования кода.
Удачи!
Привет, Руан, это связано с вашим оператором включения, см .: stackoverflow.com/questions/28573860/…
Измените use Illuminate\Http\Request; на use Request; или вместо этого используйте помощник request()->all();
Спасибо, я исправил это, изменив это: $ link-> update ($ request :: all ()); на это: $ link-> update ($ request-> all ());
Спасибо! Хотя это ошибка после реализации: ErrorException (E_DEPRECATED) Нестатический метод Illuminate \ Http \ Request :: all () не должен вызываться статически