@illy_Chuchelo

Как сделать пошаговую форму регистрации в Yii2?

Как реализовать пошаговую форму регистрации пользователя. Пользователь может покинуть регистрацию на любом шаге (закрыть вкладку в браузере), но затем, вернувшись, данные, введённые им ранее, будут сохранены.
Пока я сделал так чтобы, пользователю по очереди показывались поля формы, по нажатию "регистрация" данные записываются в бд.
Но пока что я совсем не понимаю как сделать так чтобы, при перезагрузки страницы форма и шаг были на месте
Скрипт для отображения формы я взял тут https://jsfiddle.net/aradul/2ce92efj/
По возможности, ответьте очень подробно пожалуйста..
  • Вопрос задан
  • 460 просмотров
Решения вопроса 2
vitaly_74
@vitaly_74
делай все через js обработку всей формы делаешь в модели. данные сохраняешь в куках через js срок указываешь любой.
Ответ написан
Комментировать
@illy_Chuchelo Автор вопроса
Вообщем Я нашел очень хороший скрипт на JS, который сразу записывает данные с полей в куки.
Вот статья автора
И сам скрипт
(function ntSaveForms() {
 var text, cl;
 $(".ntSaveForms").each(function(i) {
 cl = "ntSaveForms"+i;
 $(this).addClass(cl); // add new class
 text = $.Storage.get(cl);
 if (text && text.length > 0 && !$(this).val()) {
 $(this).val(text); // set field data
 }
 });

$(".ntSaveForms").keyup(function() {
 $.Storage.set($(this).attr("class").split(" ")[$(this).attr("class").split(" ").length -1], $(this).val()); // save field data
 });

$(".ntSaveFormsSubmit").click(function() {
 $(".ntSaveForms").each(function(i) {
 $.Storage.remove("ntSaveForms"+i); // remove data
 });
 });
})();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ar2rsoft
PHP-developer
После регистрации любых данных в бд, записать пользователю в куки его user ID. При последуюем входе, если с таким юзер айди есть в базе данные, вытащить их и заполнить.
Ответ написан
GreyCrew
@GreyCrew
Full-stack developer
Я вижу 2 способа
1) на Yii2
class User extends ActiveRecord
{
    const SCENARIO_STEP1 = 'step1';
    const SCENARIO_STEP2 = 'step2';
    ...

    public function scenarios()
    {
        return [
            self::SCENARIO_STEP1 => ['attr1', 'attr2'],
            self::SCENARIO_STEP2 => ['attr3', 'attr4', 'attr5'],
        ];
    }
    ...

отправляем в контроллер в зависимости от текущего шага нужную форму

public function actionStep1()
{
    $model = new OrderWizard();
    $model->setScenario(OrderWizard::SCENARIO_STEP1);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['step-2', 'id' => $model->id]);
    } else {
        return $this->render('step-1', [
            'model' => $model,
        ]);
    }
}

2) На Js

  • Отправляем сразу всю форму
  • Создаем состояния (шаг1, шаг2 и т.д.)
  • Показываем те элементы формы, которые удовлетворяют текущему состоянию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы