У меня есть форма, и после того, как пользователь отправляет форму, и проверка правильности идет, я хочу попросить у него его электронную почту и прозвище в модальном окне. Если пользователь заполняет и отправляет электронное письмо и псевдоним, я хочу его проверить и сохранить как новую запись или получить идентификатор существующего (в случае, если почта уже использовалась в прошлом). Если проверка не выполняется, пользователь должен иметь возможность корректировать значения в том же модальном формате. Если все в порядке, я хочу сохранить форму, включая создание идентификатора пользователя.
У меня уже есть сохранение формы и процесс создания/поиска пользователей. Я просто не знаю, как это сделать, работать в сценарии, описанном выше. Может ли кто-нибудь объяснить, как это должно быть сделано в 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()
метод save()
проверка выполняется автоматически. Поэтому, если проверка не выполняется, логика возвращает к тому же действию (например, создать) с полями, заполненными в представлении, поскольку в модели уже есть данные, переданные в нее: $model->attributes = $_POST['Users']
.
Если валидация прошла успешно, мы перенаправляемся дальше. Незначительная форма ajax submit, даже случайная подача подходит здесь.
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'),
Email valadation для синтаксиса электронной почты выглядит следующим образом:
array('email', 'email'),