Информация о пользователе в модальном режиме перед отправкой формы в Yii

У меня есть форма, и после того, как пользователь отправит форму и проверка пройдет нормально, я хочу попросить его указать адрес электронной почты и псевдоним в модальном окне. Если пользователь заполняет и отправляет адрес электронной почты и псевдоним, я хочу проверить его и сохранить как новую запись или получить идентификатор существующей (если электронная почта уже использовалась в прошлом). Если проверка не удалась, пользователь должен иметь возможность исправлять значения в том же модальном окне. Если все в порядке, я хочу сохранить форму, включая создание идентификатора пользователя.

У меня уже есть сохранение формы и процесс создания/поиска пользователя. Я просто не знаю, как это собрать, чтобы работало по описанному выше сценарию. Кто-нибудь может объяснить, как это сделать в Yii? Я использую Yii 1.1.15 и Yii Booster. Спасибо.


person kokoseq    schedule 07.12.2014    source источник


Ответы (1)


В Yii файл представления _form.php по умолчанию используется как в представлениях update.php, так и в представлениях create.php.

Итак, вам может понадобиться сделать что-л. аналогично: вставьте форму с модальным окном как в update.php, так и в create.php. Действия и разные для них, так что вы держите логику отдельно; это основное преимущество MVC.

public function actionCreate() {
    $model = new Users;
    if (isset($_POST['Users'])) {
        $model->attributes = $_POST['Users'];
        if ($model->save()) { // here in the save() method the valadation is included
                              // ONLY after we validate and successfully saved we go to update action
                $this->redirect(array('update', 'id' => $model->id));
        }
    }
    $this->render('create', array(
        'model' => $model,
    ));
}

Главное, чтобы при попытке сохранить метод save() проверка произошла автоматически. Поэтому, если проверка не удалась, логика возвращает к тому же действию (например, создать) с полями, заполненными в представлении, поскольку в модель уже переданы данные: $model->attributes = $_POST['Users'].

Если проверка прошла успешно, мы перенаправляем дальше. Не обязательно отправка формы ajax, сюда подходит даже случайная отправка.

public function actionUpdate($id) {
    $model = $this->loadModel($id);
    if (isset($_POST['Users'])) {
        $model->attributes = $_POST['Users'];
        if ($model->save()) { // after saving EXISTING record we redirect to 'admin' action
                $this->redirect(array('admin'));
        }
    }
    $this->render('update', array(
        'model' => $model,
    ));
} 

Формы в представлениях (обновление/создание) вы сохраняете в первоначальном виде.

Проверка на уникальность проста в правилах модели():

array('username, email', 'unique'),

Проверка электронной почты для синтаксиса электронной почты выглядит следующим образом:

array('email', 'email'),
person Igor Savinkin    schedule 08.12.2014
comment
Таким образом, решение должно быть таким: - Создать форму с отправкой Ajax - Если проверка прошла успешно, заполнить модальное окно - Пользователь вводит адрес электронной почты и псевдоним Что делать дальше? Как проверить адрес электронной почты и псевдоним, а затем отправить все данные вместе? - person kokoseq; 08.12.2014