Как вызвать функцию обновления контроллера

Я пытаюсь использовать функцию обновления контроллера на моей странице панель инструментов.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?

Посмотрите, как создать HTML-форму, затем вместо использования привязки используйте кнопку отправки и установите для формы метод PUT/PATCH. Вы получите страницу показа, потому что привязка переходит к версии GET posts/{post_id}, которую вы хотите версия PUT/PATCH сообщений/{post_id} больше информации об ОТДЫХЕ

naamhierzo 20.02.2019 12:51

Большое спасибо! но на самом деле я хотел бы иметь кнопку сохранения для каждой строки в таблице, это возможно с помощью кнопки отправки? Нет другого способа вызвать функцию обновления вместо использования формы?

m.m 20.02.2019 13:03

Другим способом может быть отправка ajax-запроса на posts/{post_id} с помощью метода put/patch Смотрите ajax-запросы через axios.

naamhierzo 20.02.2019 13:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
397
3

Ответы 3

Чтобы обновить данные, вы должны использовать метод form с put. и маршрут будет таким,

Route::put('dashboard/update/{id}',[
            'uses' => 'DashboardController@update',
            'as' => 'dashboard.update'
        ]);

Подробнее Laravel Маршрутизация

Надеюсь, поможет :)

В OP уже определен контроллер ресурсов (контроллер ресурсов уже определяет маршрут обновления)

naamhierzo 20.02.2019 13:55

хорошо, но вы должны указать метод put в своем action

Maulik Shah 20.02.2019 14:03

Большое спасибо! На самом деле я ищу решение без использования формы, потому что мне нужна кнопка сохранения для каждой строки в таблице. Есть ли другой способ вызвать функцию обновления в PostsController.php?

m.m 20.02.2019 14:13

Вы можете сделать одну вещь: вы можете показать кнопку save в каждой строке, а при нажатии вы можете вызвать метод, который возвращает представление, и после этого вы можете его обновить.

Maulik Shah 20.02.2019 14:15

Вы можете решить эту проблему, используя отправку формы со скрытым методом PUT.

<form action = "{{ url('customers') }}/{{$data['customer']->id}}" method = "POST">
        <input type = "hidden" name = "_method" value = "PUT">
        @csrf
</form>

большое спасибо! На самом деле я ищу решение без использования формы, потому что мне нужна кнопка сохранения для каждой строки в таблице. Есть ли другой способ вызвать функцию обновления в PostsController.php?

m.m 20.02.2019 14:06

Как насчет простой формы для каждой строки в таблице:

@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

Большое тебе спасибо! но когда я нажимаю кнопку сохранения, ничего не происходит.. может быть, чего-то не хватает?

m.m 21.02.2019 08:01

Другие вопросы по теме