Использование HTML-формы для сохранения в ресурс (Laravel 5.8) - PullRequest
1 голос
/ 06 марта 2019

Я создаю приложение laravel, которое позволяет пользователям создавать сообщения в блоге.

Я создал PostsController как ресурс с функцией хранилища, подобной этой:

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required',
        'body' => 'required'
    ]);

    return 123;
}

Также,Я добавил маршрут в web.php

Route::resource('posts', 'PostsController');

Если я перечислю маршруты с помощью php artisan php artisan show:routes, появится метод POST:

enter image description here

Форма HTML выглядит следующим образом:

<form action="PostsController@store" method="POST">        
    <div class="form-group">
        <label for="title">Title</label>
        <input class="form-control" type="text" id="title">
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea class="form-control" id="body" rows="3"></textarea>
    </div>
    <input type="submit" class="btn btn-primary">
</form>

Когда я отправляю форму, я получаю MethodNotAllowedHttpException:

The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.

Я использовал, чтобы использоватьLaravel коллектив для форм раньше.Некоторое время в laravel не выполнялось никакой работы, и теперь она устарела (https://laravelcollective.com/),, поэтому я прибег к классической форме HTML. Как мне обойти это?

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

Ваше действие неверно в вашей форме - вам нужно указать действие на URL-адресе маршрута, а затем маршрут выберет метод, в данном случае метод «store».Также добавьте @csrf для получения дополнительной информации CSRF Protection

<form action="{{ route('posts.store') }}" method="POST">
   @csrf        
    <div class="form-group">
        <label for="title">Title</label>
        <input class="form-control" type="text" id="title">
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea class="form-control" id="body" rows="3" name="body"></textarea>
    </div>
    <input type="submit" class="btn btn-primary">
</form>
1 голос
/ 06 марта 2019

добавить имя в текстовое поле и текстовое поле

form action="{{ route('posts.store') }}" method="POST">
       @csrf        
        <div class="form-group">
            <label for="title">Title</label>
            <input class="form-control" type="text" id="title" name="title">
        </div>
        <div class="form-group">
            <label for="body">Body</label>
            <textarea class="form-control" id="body" rows="3" name="body"></textarea>
        </div>
        <input type="submit" class="btn btn-primary">
    </form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...