В 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