Как правильно реализовать оформление заказа на нескольких страницах?
Добрый день!
Сейчас делаю интернет-магазин на Laravel - суть следующая:
Нужно реализовать оформление заказа на нескольких страницах (разные этапы оформления - Контакты/Доставка/Оплата).
Назовем эти этапы step1, step2, step3.
Проблема - есть таблица заказов в бд (orders), которая хранит в себе данные со всех трех этапов оформления заказа.
Всю валидацию провожу на бэкенде стандартными средствами Laravel.
Вопрос: как правильно передавать данные между этапами оформления заказа. То есть на каждой странице есть форма -> юзер заполнил форму -> данные провалидировались -> как только "все ок" переходим на step2, step3. И в конечном итоге, в конце step3 нужно записать данные заказа в таблицу orders.
Не понимаю как правильно хранить данные так, чтобы если клиент вернулся на любой предыдущий этап - данные "подтянулись" и он мог их изменить и в конце концов на step3 записать данные в бд.
Как это делать безопасно, чтобы данные были защищены и, допустим, злоумышленник не смог обойти валидацию.
Есть два пути:
1. Записывать данные в таблицу orders каждом шаге и отдельно валидировать каждый шаг, но установить у заказа статус "черновик". Переводить в активный статус, только если отправлен третий шаг и валидны все три (надо проверить)
2. Писать состояние заказа в сессию и валидировать все данные один раз на последнем шаге.
Первый вариант позволит продолжить оформление заказа в другой сессии + вы будете видеть так называемые "брошенные корзины", менеджеры потом смогут связаться с клиентом и узнать что не так и, может быть, повысить продажи.
Т.е. каким образом, во-первых, знать на всех шагах 'id' созданной на первом этапе новой записи в бд (ведь на втором этапе мы же должны будем только дозаполнить заказ, а не создавать новую запись в таблице. И, во-вторых, как эти данные менять, в случае, если клиент вернулся на предыдущий этап (ведь ещё и, по-хорошему, нужно "подтянуть" уже введённые ранее данные).
Златослав Десятников: Спасибо вам за ответы. Наводите на правильные мысли. Но не понимаю как и где хранить индекс (id) во время всех этих переходов по этапам оформления заказа, чтобы всегда знать куда записывать/откуда подтягивать данные. Самое значение созданной (при orders/create) id строки где хранить?
И еще такой вопрос - если человек вышел со страницы оформления заказа (например решил дополнить товаров в корзину) и начал заново оформлять заказ - дубликаты "черновых" заказов ведь будут появляться?
Рустам Идрисов: ну, при переходе с /orders/create (создание заказа и переход на первый шаг), мы получим ID созданного заказа и сгенерируем action для формы первого шага (/orders/edit/124124/1) и так далее.
Я решил записыванием данных в корзину заказа. Или в сессию( если не зарегистрирован). Поскольку корзина для каждого пользователя по факту одна, как и "шаги заказа".