Форма
Код: Выделить всё
<h1>Регистрация</h1>
<div class="form">
<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
)); ?>
<div class="row">
<?php echo $form->error($model,'us_login'); ?>
<?php echo $form->label($model, 'us_login'); ?>
<?php echo $form->textField($model, 'us_login' )?>
</div>
<div class="row">
<?php echo $form->error($model,'us_meil'); ?>
<?php echo $form->label($model, 'us_meil'); ?>
<?php echo $form->textField($model, 'us_meil' )?>
</div>
<div class="row">
<?php echo $form->error($model,'us_pass'); ?>
<?php echo $form->label($model, 'us_pass'); ?>
<?php echo $form->passwordField($model, 'us_pass') ?>
</div>
<div class="row">
<?php echo $form->error($model,'password2'); ?>
<?php echo $form->label($model, 'password2'); ?>
<?php echo $form->passwordField($model, 'password2') ?>
</div>
<div class="row">
<?php echo $form->label($model, 'us_rass'); ?>
<?php echo $form->dropDownList($model,'us_rass',User::model()->rassOptions) ?>
</div>
<div class="row submit">
<?=CHtml::submitButton('Зарегистрироваться', array('id' => "submit")); ?>
</div>
<?php $this->endWidget(); ?>
</div>
Код: Выделить всё
class UserController extends CController
{
public function actionIndex()
{
$this->redirect('/');
}
protected function performAjaxValidation($model) {
if(isset($_POST['ajax']) && $_POST['ajax']==='user_form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
public function actionRegistration()
{
var_dump($_POST);
if (Yii::app()->user->isGuest) {
$model = new User;
/*
* Ajax валидация
*/
$this->performAjaxValidation($model);
if(empty($_POST['User'])) {
$this->render('registration', array('model' => $model));
} else {
$model->attributes = $_POST['User'];
if($model->model()->count('us_login = :us_login', array(':us_login' => $model->us_login)))
{
$model->addError('us_login', 'Такое имя пользователя уже занято.');
$this->render('registration', array('model' => $model));
Yii::app()->end();
}
if($model->validate('registration')) {
if($model->model()->count("us_login = :us_login",
array(':us_login' => $model->us_login))) {
$model->addError('us_login', 'Имя пользователя уже занято');
$this->render("registration", array('model' => $model));
} else {
if($model->save()) {
$role = new AuthAssignment();
$role->itemname = 'User';
$role->userid = $model->id;
if($role->save()) {
$this->render("registration_ok");
} else {
throw new CHttpException(403, 'Ошибка добавления в базу данных.');
}
} else {
throw new CHttpException(403, 'Ошибка добавления в базу данных.');
}
}
} else {
$this->render('registration', array('model' => $model));
}
}
} else {
$this->redirect(Yii::app()->user->returnUrl);
}
}
}
Код: Выделить всё
class User extends CActiveRecord
{
public $password2;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'user';
}
public function rules()
{
return array(
array('us_login, us_pass, us_meil', 'required', 'on'=>'registration'),
array('password2', 'compare', 'compareAttribute' => 'us_pass', 'on'=>'registration'),
array('us_login, us_pass, us_meil, us_rass', 'required'),
array('us_meil', 'match', 'pattern' => '/^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/', 'message' => 'Не верный формат e-mail адреса.'),
array('us_login', 'match', 'pattern' => '/^[A-Za-z0-9_-А-Яа-я\s,]+$/u','message' => 'Логин содержит недопустимые символы.'),
array('us_login', 'length', 'max' => 100, 'min' => 3),
array('us_pass, password2', 'length', 'max' => 40, 'min' => 5),
);
}
public function attributeLabels()
{
return array(
'us_login' => 'Логин',
'us_pass' => 'Пароль',
'password2' => 'Повтори пароль',
'us_meil' => 'e-mail',
'us_rass' => 'выберите цифру',
);
}
public function getRassOptions()
{
return array(
1=>'1',
2=>'2',
3=>'3',
4=>'4',
5=>'5',
6=>'6',
);
}
}