#laravel #e-commerce #crud
#laravel #электронная коммерция #crud
Вопрос:
Я создаю веб-сайт электронной коммерции и пытаюсь завершить управление заказами для обычных пользователей / клиентов. Я хочу разрешить клиенту отменить заказ, если статус все еще находится на рассмотрении. У меня есть OrderHistoryController
следующее:
public function cancel(Order $order)
{
$order->status = 'canceled';
$order->save();
//check if all suborders are canceled
$pendingSubOrders = $order->subOrders()->where('status','!=', 'canceled')->count();
if($pendingSubOrders == 0) {
$order->order()->update(['status'=>'canceled']);
}
return redirect('/order-history/{order}')->withMessage('Order was canceled');
}
Я создал маршрут в своем web.php:
Route::get('/order-history/cancel', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');
и в моем блейд-файле есть кнопка:
@if ($order->status == 'pending')
<button type="submit" class="default-btn floatright"><a href="{{route('order-history.cancel', $order)}}"> Cancel Order</a></button>
@endif
Что я хочу сделать, это обновить статус в моей Order
таблице с «ожидающий» на «отмененный» после нажатия кнопки. Когда я это делаю, я перенаправляюсь на страницу localhost: 8000 / история заказов / отмена
404|Not Found
В чем, по-видимому, проблема? Или есть какой-либо другой способ, которым я могу это сделать? Любые советы будут высоко оценены. Заранее спасибо!
Ответ №1:
Вам не хватает идентификатора заказа в вашем маршруте, поэтому измените:
Route::get('/order-history/cancel', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');
Для
Route::get('/order-history/cancel/{order}', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');