Регистрация

Здравствуйте только начал изучать Yii . Можете проверить правильно ли я организовал регистрацию или правильнее было бы каким-то другим методом.

Модель Users


<?php

/**

 * Description of User

 *

 * @author like2dev

 */

class User extends CActiveRecord {


    public $verifyCode;

    public $passwd2;

    

    public static function model($className = __CLASS__)

    {

        return parent::model($className);

    }

    

    public function tableName()

    {	

        return 'user';

    }


    public function rules()

    {

        return array(

            array('login, passwd', 'length', 'max'=>15, 'min' => 4),

            array('login, passwd', 'required'),

            array('login','unique'),

            array('passwd2', 'required', 'on'=>'registration'),

            array('passwd', 'compare', 'compareAttribute'=>'passwd2', 'on'=>'registration'),

            array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),

            array('login', 'match', 'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]+$/u','message' => 'Логин содержит недопустимые символы.'),

        );

    }


    public function attributeLabels()

    {

        return array(

            'login'   => 'Логин',

            'passwd'  => 'Пароль',

            'passwd2' => 'Повторный пароль пароль',

        );

    }

    /* Че то не работает <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/sad.gif' class='bbc_emoticon' alt=':(' /> */

    public function onBeforeSave() {        

        $this->setAttribute("passwd", md5($passwd));

        $this->setAttribute("created", date("Y-m-d H:i:s"));

    }

}

UserController


<?php

/**

 * Description of UserController

 *

 * @author like2dev

 */

class UserController extends CController {


    public function actions()

    {

        return array (

            'captcha' => array(

                'class' => 'CCaptchaAction',

                'backColor' => 0x003300,

                'minLength' => 3,

                'maxLength' => 3,

                'foreColor' => 0x66FF66,

            ),

        );

    }


    public function actionLogin()

    {

    }


    public function actionLogout()

    {

    }


    public function actionRegistration()

    {

       $form = new User();      

       

       if (!Yii::app()->user->isGuest) {

            throw new CException('Вы уже зарегистрированны!');

       } else {

           if (!empty($_POST['User'])) {

               $form->attributes = $_POST['User'];

               $form->verifyCode = $_POST['User']['verifyCode'];

               $form->passwd2 = $_POST['User']['passwd2'];

               $form->setScenario('registration');

               if($form->validate()) {                  

                       $form->save();

                       $this->render("registration_ok",array('data' => $form->attributes));                   

                } else {

                    $this->render("registration", array('form' => $form));

                }

            } else {

                $this->render("registration", array('form' => $form));

           }

       }

   }

}

в View элементы форм создаю через actionTextField e.t.c

Так же хотел бы посоветоваться , регистрация предполагает 3 шага заполнения данных.

Страница 1 :

Такие данные как login,password,mail e.t.c.

Страница 2 :

ФИО,Страна,Город и т.д.

Страница 3 :

icq,jabber,vkontakte и т.д.

Посоветуйте стоит ли реализовывать это через ajax? или через простую навигацию.

[font="Courier New"]


array('login, passwd', 'length', 'max'=>15, 'min' => 4),//Это лишнее если регулярку используешь

array('login', 'match', 'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]+$/u','message' => 'Логин содержит недопустимые символы.'),

Можно поменять на


array('login', 'match', 'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]{4,15}+$/u','message' => 'Логин содержит недопустимые символы.'),

array('passwd', 'required'), //Логин уже всегда должен быть заполнен, тут лишнее

Это лишнее


array('passwd2', 'required', 'on'=>'registration'),

И не должно работать…ты в md5 локальную переменную пытаешься взять, а её нет


$this->setAttribute("passwd", md5($this->passwd));

Первый шаг нужен для всех, второй и третий заполняется в профиле. Вот после прохождения первого шага кидай в редактирование профиля…а тут как хочешь.

[/font]

На счет регулярок спасибо. События не работало потому что я не правильно вызывал его

вот так надо было


    protected function beforeSave()

    {

	if(parent::beforeSave())

        {

            $this->setAttribute('passwd', md5($this->getAttribute('passwd')));

            $this->setAttribute('created', date('Y-m-d H:i:s'));

            return true;

        }

	else

            return false;

    }

array(‘passwd2’, ‘required’, ‘on’=>‘registration’) - почему это не нужно?

И хотел спросить что за параметр такой есть safe , unsafe - что они означают

Т.к. поле уже не может быть пустым…


'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]{4,15}+$/u'

Хотя да я возможно не прав…в ворме тогда * не будет выводится.

Фильтрация текста от иньекций. unsafe тупо нет фильтрации…свободно пиши SQL инъекции.

Это первый фрейворк -который я изучаю. В голове каша из новых непонятных абстрактных понятий. Где можно скачать простой работоспособный пример, реализующий регистрацию и авторизацию?

Можете поизучать это расширение:

http://www.yiiframework.com/extension/yii-user/

Спасибо andy_s !

Вопрос не по теме - в документации встречаю класс CController а в реальном приложении Controller - как это понять?

Controller это скорее всего наследник от CController, тоже самое что некоторые(да и сам я) создают базовый класс BaseController для всего приложения, и от него наследуются классы своего приложения