отправка формы laravel использует неправильный метод контроллера

#php #mysql #laravel

Вопрос:

Я пытаюсь использовать форму для отправки отзывов о продуктах, но я считаю, что кнопка «Отправить» использует неправильный метод хранения контроллера. У меня есть контроллер для продуктов и один для обзоров. Магазин продуктов работает правильно, и я вижу, что база данных заполняется после отправки, однако, когда я отправляю отзыв о продукте, он выдает пользовательские сообщения об ошибках из формы магазина продуктов. Если я изменю форму отзывов::открыть на форму продуктов::открыть, это выдаст ошибку: Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD, POST.

Форма продуктов (работает должным образом)

         {!! Form::open(['action' => 'AppHttpControllersProductsController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}

        ... labels and text ...

        {{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
        {!! Form::close() !!}
 

Форма отзывов

                 <div>
                    <p>Write a review</p>
                    <!-- submit review form -->
                    {!! Form::open(['reviews' => 'AppHttpControllersReviewsController@store']) !!}
                    <div class="form-group">

                        {{ Form::textarea('description', '', ['class' => 'form-control', 'placeholder' => 'Write your message']) }}
                    </div>

                    <div class="form-group">
                        {{ Form::label('rating', 'Rating') }}
                        {{ Form::select('rating', ['1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'], '1') }}
                    </div>

                    {{ Form::hidden('_method', 'PUT') }}
                    {{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
                    {!! Form::close() !!}

                </div>
 

Обзор магазина контроллеров

     public function store(Request $request, $id)
    {
        $this->validate($request, ['description' => 'nullable',
  'rating' => 'nullable',
        ]);

        $review =  new Review;

        $review->rating = $request->input('rating');
        $review->reviewerid = auth()->user()->id;
        $review->productid = $id;
        $review->description = $request->input('description');

        $review->save();

        return redirect('/products/$id')->with('success', 'Review submitted');
    }
 

Web.php файл

 Route::get('/', 'AppHttpControllersPagesController@index');
Route::get('/about', 'AppHttpControllersPagesController@abouts');
Route::get('/cart', 'AppHttpControllersPagesController@cart');
Route::get('/checkout', 'AppHttpControllersPagesController@checkout');
Route::get('/dashboard', 'AppHttpControllersPagesController@services');
Route::get('/categories/{Category}', 'AppHttpControllersPagesController@category');
Route::resource('reviews', 'AppHttpControllersReviewsController');
Route::resource('products', 'AppHttpControllersProductsController');
Auth::routes();
 

Ответ №1:

Ошибка происходит из-за этой строки:

 Form::hidden('_method', 'PUT')
 

Вы говорите ларавелю использовать метод put. Удалите его, и он будет работать нормально.

Для вашего действия с формой, я думаю, у вас есть тип в этой строке:

 {!! Form::open(['reviews' => 'AppHttpControllersReviewsController@store']) !!}
 

Измените его на :

 {!! Form::open(['action' => 'AppHttpControllersReviewsController@store']) !!}
 

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

1. спасибо, кажется, я немного продвинулся вперед. мне пришлось запустить команду «php artisan route:очистить», чтобы она появилась