Laravel Ошибка: метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD - PullRequest
0 голосов
/ 26 мая 2020

Добрый вечер, для школы, я пытаюсь создать простое приложение CRUD, используя laravel 6 и mongoDB.

Я могу читать, обновлять и удалять работающие, но Creat не работает с методом POST. поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD .. Я искал ответы здесь и на других сайтах, но я застрял на 2 дня (может быть что-то очень глупое, но я этого не вижу)

мои маршруты:

Route::get('/home', 'HomeController@index')->name('home');
Route::get('/post/{_id?}', 'PostController@form')->name('post.form');
Route::post('/post/save/', 'PostController@save')->name('post.save');
Route::put('/post/update/{_id}', 'PostController@update')->name('post.update');
Route::get('/post/delete/{_id}', 'PostController@delete')->name('post.delete');

form.blade:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Post Form</div>
                <div class="card-body">
                    @if($data)
                <form action = "{{Route ('post.update', $data->_id)}}" method="post">
                    @csrf
                    @method('PUT')
                    <div class="form-group">
                        <label for="usr">Title:</label>
                        <input type="text" class="form-control" name="title" value = "{{$data->title}}" >
                      </div>
                      <div class="form-group">
                        <label for="comment">Content:</label>
                        <textarea class="form-control" rows="5" name="content">{{$data->content}}</textarea>
                    </div>
                    <p align="center"> <button class="btn btn-primary">save</button></p>
                </form>

                @else
                <form action = "{{Route ('post.form')}}" method="post">
                    @csrf
                    <div class="form-group">
                        <label for="usr">Title:</label>
                        <input type="text" class="form-control" name="title">
                      </div>
                      <div class="form-group">
                        <label for="comment">Content:</label>
                        <textarea class="form-control" rows="5" name="content"></textarea>
                    </div>
                    <p align="center"> <button class="btn btn-primary">save</button></p>
                </form>

                @endif

            </div>
        </div>
    </div>
</div>
@endsection

, а мой PostController:

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    //
    public function form($_id = false){
        if($_id){
            $data = Post::findOrFail($_id);

        }

       $data = false;
        return view ('post.form', compact('data'));
    }

    public function save (Request $request){
    $data =  new Post($request->all());

    $data->save();

    if($data){
        return redirect()->route('home');

    }else{
        return back();
        }
    }

    public function update (Request $request, $_id){

        $data = post::findOrFail($_id);

        $data->title    = $request->title;
        $data->content  = $request->content;
        $data->save();

        /* return response()->json([
            'name' => 'Abigail',
            'state' => 'CA'
        ]); */

        if($data){
            return redirect()->route('home');

        }else{
            return back();
            }
        }

        public function delete($_id){
            $data = post::destroy($_id);
            if($data) {
                return redirect()->route('home');
            }
         else {
            dd('error cannot delete this post');
        }
    }
}

Кто-нибудь знает, что мне не хватает?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 26 мая 2020

Вы должны заменить эту строку <form action = "{{Route ('post.form')}}" method="post"> на <form action = "{{Route ('post.save')}}" method="post">

1 голос
/ 26 мая 2020

Вы используете неправильный маршрут. Пожалуйста, измените на Route ('post.save')

0 голосов
/ 27 мая 2020

РЕДАКТИРОВАТЬ: Я сам нашел это, PostControler не возвращал представление, если было $ _id

Всем спасибо за помощь! Спасибо, что указали на это, он вернул меня к жизни :) Однако он нарушает функцию обновления: S.

Когда я теперь нажимаю кнопку редактирования, форма больше не заполняется данными для сообщения, а "save" создает новое сообщение вместо его обновления.

...