Я пытаюсь использовать функцию обновления контроллера на моей странице панель инструментов.blade.php, но когда я нажимаю «Сохранить», он переключается на страницу show.blade.php вместо обновления.
Моя страница панель инструментов.blade.php:
@if (count($posts) > 0 )
<table class = "table table-striped">
<tr>
<th>Title</th>
<th>Body</th>
<th>Employee Number</th>
<th>Edit</th>
<th>Save</th>
</tr>
@foreach($posts as $post)
<tr>
<td>{{$post->title}}</td>
<td><input type='text' name='body'class='form-control' value='{{$post->body}}'></td>
<td>{{$post->employee_no}}</td>
<td><a href = "{{ action("PostsController@update", $post->id) }}" >Save</a></td>
<td><a href = "/lsapp/public/posts/{{$post->id}}/edit" class = "btn btn-default">Edit</a></td>
</tr>
@endforeach
</table>
@else
<p>You Have No Posts</p>
@endifМоя функция обновления на странице PostsController.php:
public function update(Request $request, $id)
{
$this->validate($request,[
//'title' => 'required',
'body' => 'required'
]);
//Update Post
$post = Post::find($id);
//$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('/posts')->with('success','Post Updated');
}Я читал, что "действие" будет идти по первому маршруту, соответствующему шаблону, но я не знаю, как решить эту проблему.
Моя страница веб.php:
Route::get('/', 'PagesController@index');
Route::get('/about', 'PagesController@about');
Route::get('/services', 'PagesController@services');
Route::resource('posts','PostsController');
Auth::routes();
Route::get('/dashboard', 'DashboardController@index');Как правильно вызвать функцию обновления со страницы панель инструментов.blade.php?
Большое спасибо! но на самом деле я хотел бы иметь кнопку сохранения для каждой строки в таблице, это возможно с помощью кнопки отправки? Нет другого способа вызвать функцию обновления вместо использования формы?
Другим способом может быть отправка ajax-запроса на posts/{post_id} с помощью метода put/patch Смотрите ajax-запросы через axios.






Чтобы обновить данные, вы должны использовать метод form с put.
и маршрут будет таким,
Route::put('dashboard/update/{id}',[
'uses' => 'DashboardController@update',
'as' => 'dashboard.update'
]);
Подробнее Laravel Маршрутизация
Надеюсь, поможет :)
В OP уже определен контроллер ресурсов (контроллер ресурсов уже определяет маршрут обновления)
хорошо, но вы должны указать метод put в своем action
Большое спасибо! На самом деле я ищу решение без использования формы, потому что мне нужна кнопка сохранения для каждой строки в таблице. Есть ли другой способ вызвать функцию обновления в PostsController.php?
Вы можете сделать одну вещь: вы можете показать кнопку save в каждой строке, а при нажатии вы можете вызвать метод, который возвращает представление, и после этого вы можете его обновить.
Вы можете решить эту проблему, используя отправку формы со скрытым методом PUT.
<form action = "{{ url('customers') }}/{{$data['customer']->id}}" method = "POST">
<input type = "hidden" name = "_method" value = "PUT">
@csrf
</form>
большое спасибо! На самом деле я ищу решение без использования формы, потому что мне нужна кнопка сохранения для каждой строки в таблице. Есть ли другой способ вызвать функцию обновления в PostsController.php?
Как насчет простой формы для каждой строки в таблице:
@if (count($posts) > 0 )
<table class = "table table-striped">
<tr>
<th>Title</th>
<th>Body</th>
<th>Employee Number</th>
<th>Edit</th>
<th>Save</th>
</tr>
@foreach($posts as $post)
<tr>
<td>{{$post->title}}</td>
<td>{{$post->employee_no}}</td>
<td>
<!-- Form for each row -->
<form action = "{{ route("posts.update", [ 'post' => $post->id ]) }}" method = "POST">
@method('PUT')
@csrf
<input type='text' name='body'class='form-control' value='{{$post->body}}'></td>
<button type = "submit">Save</button>
</form>
<!-- Form for each row -->
<td><a href = "/lsapp/public/posts/{{$post->id}}/edit" class = "btn btn-default">Edit</a></td>
</tr>
@endforeach
</table>
@else
<p>You Have No Posts</p>
@endif
Большое тебе спасибо! но когда я нажимаю кнопку сохранения, ничего не происходит.. может быть, чего-то не хватает?
Посмотрите, как создать HTML-форму, затем вместо использования привязки используйте кнопку отправки и установите для формы метод PUT/PATCH. Вы получите страницу показа, потому что привязка переходит к версии GET posts/{post_id}, которую вы хотите версия PUT/PATCH сообщений/{post_id} больше информации об ОТДЫХЕ