Добавление идентификатора пользователя в сообщение с помощью нажатия кнопки Laravel приводит к ошибке «Метод сообщения не поддерживается» - PullRequest
1 голос
/ 17 апреля 2020

В этом приложении у меня есть таблица пользователей и таблица сообщений.

В отдельном столбце сообщений (post / {id}) у меня есть кнопка под названием «Pick Up Task». При нажатии он должен установить $ post-> user в качестве идентификатора текущего пользователя. Я настроил все в соответствии с текущей документацией, но все равно выдает ошибку: «Метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD.»

Вот мой код:

Кнопка в почтовом блейде

<form action="update" method="POST">
                @csrf
                <input type="hidden" name="user_id" value="{{Auth::user()->id}}"/>
                <input type="hidden" name="task_id" value="{{ $task->id }}"/>
                <button class="btn btn-outline-secondary" type="submit" value= "UPDATE" href="#">➕ Pick up Task</button>
                </form>

Функция в почтовом контроллере

// ADD USER TO TASK
public function update() 
{
    $user = request('user_id');
    $task = request('task_id');

    //Fill Post User
    $selectedtask = Posts::findOrFail($task);
    $selectedtask->update(['user', $user]);

    //Success
    Session::flash('success', 'You picked up a new task.');
    return view('/');

}

Мои маршруты (web. php)

//Add user as assignee
Route::POST('update', 'PostController@update');

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вас отправляют на неправильный URI.

Измените тег form на этот:

<form action="" method="POST">

Это будет гарантировать, что вас отправляют по тому же маршруту вы в настоящее время включены, но с методом POST вместо метода GET.

Ваши маршруты должны выглядеть следующим образом:

Route::get('post/{post}', 'PostController@show'); // For viewing
Route::post('post/{post}', 'PostController@update'); // For updating

Исправьте метод контроллера update для работы с параметры через привязку модели :

public function update(Request $request, Post $post) 
{
    $user = request('user_id');
    $task = request('task_id');

    //Fill Post User
    $selectedtask = Posts::findOrFail($task);
    $selectedtask->update(['user', $user]);

    //Success
    Session::flash('success', 'You picked up a new task.');
    return view('/');

}

Я также предполагаю, что вы смешиваете task_id с идентификатором модели поста, так как вы выбираете пост через эта переменная запроса? Используя привязку модели и доступ к пользователю через объект Request, вы можете свести ваш метод контроллера к следующему:

public function update(Request $request, Post $post) 
{
    $post->update(['user' => $request->user()->id]);
    return redirect('/')->with('success', 'You picked up a new task.');
}

Привязка модели автоматически вернет 404, если не существует.

1 голос
/ 17 апреля 2020

попробуйте переместить

Route::POST('update', 'PostController@update');

в начало файла. php файл, затем очистите кэш маршрута, измените код

<form action="/update" method="POST">

(добавьте sla sh перед обновлением) и попробуй свой код

...