#php #laravel-7
#php #laravel-7
Вопрос:
сообщество!
Я изучал фреймворк laravel и застрял на концепции контроллера ресурсов
Я создал контроллер ресурсов с помощью команды artisan, то есть php artisan make:controller PostController —resource
Вот код: create.blade.php (это папка views / posts)
@extends('main')
@section('content')
<div class="row">
<div class="col-mid-8 col-md-offset-2" >
<h1>Create New Post</h1>
<hr>
<form action="posts/create" method="GET">
<div class="form-group">
<input type="text" class="form-control"
name="title" aria-describedby="emailHelp">
</div>
<div class="form-group">
<input type="text" class="form-control"
name="body" aria-describedby="emailHelp">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
@endsection
PostController.php
class PostController extends Controller
{
public function create()
{
return view('posts.create');
}
web.php (маршрут)
<?php
use IlluminateSupportFacadesRoute;
Route::resource('posts', 'PostController');
пожалуйста, объясните мне, что я делаю неправильно.
Комментарии:
1. Добавьте имя метода в web.php вот так,
Route::resource('posts', 'PostController@create');
2. Или попробуйте изменить имя метода с
create()
наindex()
в PostController.php3. можете ли вы также вставить свой URL во время создания?
Ответ №1:
Route::post('posts/create', 'PostController@create')->name('posts');
И измените действие и метод вашей формы .blde
action="{{route('posts')}}" method="post"
Также измените метод вашего контроллера
public function create(Request $r){}
Ответ №2:
Вы должны следовать руководствам по дизайну на официальном веб-сайте laravel. Когда вы пишете
Route::resource('posts', 'PostController');
он создает конкретные маршруты здесь документация.
В вашем случае вы хотите отобразить этот маршрут
GET /posts/create create posts.create
Таким образом, это означает, что этот маршрут ищет функцию `create`. Ваш код выглядит нормально, но `404` означает, что ваш метод create не может найти указанный блейд. Пожалуйста, проверьте, куда вы его поместили, и URL, который вы используете для доступа, является `http:yourUrl/posts/create `.
Кроме того, данные формы обычно передаются (хороший шаблон проектирования) методом POST, и я предлагаю не вводить жестко имя маршрута, что упростит поддержку вашего кода:
<form action="{{route("here route_name for post method")}}" method="POST">