У меня есть форма, и после того, как пользователь отправил форму, и проверка прошла нормально, я хочу попросить его указать адрес электронной почты и псевдоним в модальном окне. Если пользователь заполняет и отправляет электронное письмо и псевдоним, я хочу подтвердить его и сохранить как новую запись или получить идентификатор существующей (в случае, если электронная почта уже использовалась в прошлом). Если проверка не удалась, пользователь должен иметь возможность исправлять значения в том же режиме. Если все в порядке, я хочу сохранить форму, включая создание идентификатора пользователя.
У меня уже есть сохранение формы и процесс создания / поиска пользователя. Я просто не знаю, как это собрать, чтобы работать по сценарию, который я описал выше. Кто-нибудь может объяснить, как это должно быть сделано в Yii? Я использую Yii 1.1.15 и Yii Booster. Спасибо.
В 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'),
Других решений пока нет …