create.blade.php показывает 404 | не найден

#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.php

3. можете ли вы также вставить свой 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">