#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:очистить», чтобы она появилась