Laravel: Метод POST не поддерживается для этого маршрута

#php #laravel #post

#php #laravel #Публикация

Вопрос:

Я вроде как новичок в Laravel, и я создал форму для своей страницы, в которую пользователи могут добавлять новое изображение, и эта форма находится в create.blade.php :

 <form action="/p" enctype="multipart/form-data" method="post">
@csrf
<div class="row">
    <div class="col-8 offset-2">
        <div class="row">
            <h1>Add New Post</h1>
        </div>
        <div class="form-group row">
            <label for="caption" class="col-md-4 col-form-label">Post Caption</label>

              
            <input id="caption" 
                type="text" 
                class="form-control @error('caption') is-invalid @enderror" 
                name="caption" 
                value="{{ old('caption') }}" 
                autocomplete="caption" autofocus>

                @error('caption')
                    <span class="invalid-feedback" role="alert">
                        <strong>{{ $message }}</strong>
                    </span>
                @enderror
             
        </div>
        <div class="row">
            <label for="image" class="col-md-4 col-form-label">Post Image</label> 
            <input type="file" class="form-control-file" id="image" name="image">
            @error('image')
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
            @enderror
        </div>
        <div class="row pt-4">
            <button class="btn btn-primary">Add New Post</button>
        </div>
    </div>
</div>
  

И это web.php файл (routes):

 Route::get('/p/create','PostsController@create');
Route::get('/p','PostsController@store');

Route::get('/profile/{user}', 'ProfilesController@index')->name('profile.show');
  

Как вы можете видеть, это относится к PostController.php , который является этим:

 class PostsController extends Controller
{
    public function create()
    {
        return view('posts.create');
    }
    public function store()
    {
        dd(request()->all());
    }
}
  

Также я выполняю команду php artisan route:list , и это все:

экран печати

Итак, что здесь происходит не так? Я много искал, но не смог найти ничего полезного. Поэтому, если вы знаете, как это решить, пожалуйста, дайте мне знать.

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

Комментарии:

1. просто укажите свой маршрут — Route::post(‘/p’,’PostsController@store’);

Ответ №1:

Вы отправляете запрос на сервер, поэтому вам нужно задать свой HTTP-запрос как post, а не get, вот так

 Route::post('/p','PostsController@store');
  

Ответ №2:

Вам нужно добавить POST маршрут

 Route::post('/p','PostsController@store');
  

Ответ №3:

  1. В create.blade.php метод form есть POST , но в web.php Route::get('/p','PostsController@store'); поэтому вам следует изменить Route::post('/p','PostsController@store') вместо Route::get('/p','PostsController@store')

  2. В контроллере

     use IlluminateHttpRequest;
    class PostsController extends Controller
    {
        public function create()
        {
            return view('posts.create');
        }
        public function store(Request $request)
        {
            dd($request->input('image'));
        }
    }