yii登录

框架无非就是mvc,只是调用的父类操作比较繁琐。


 

登录:

C:TestController.php/actionLogin方法

	public function actionLogin()
	{
		$model=new TestLogin;
		
		if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
		
		if(isset($_POST['TestLogin']))
		{
			$aa=$model->attributes=$_POST['TestLogin'];
			if($model->validate() && $model->login()){
				$this->redirect (array('aa/test/index'));
			}
				//$this->redirect (yii::app()->user->rerurnUrl);
		}
		//$this->renderPartial('login',array('model'=>$model));
		$this->render('login',array('model'=>$model));
	}

 M:TestLogin.php模型

<?php

class TestLogin extends CFormModel{

	public $username;
	public $password;
	public $rememberMe = false;
	private $_identity;
	/**
	 * 用户登录,需要用户名和密码
	 * 验证密码
	 * @return array
	 */
	public function rules()
	{
		return array(
			array('username,password',  'required'),
			array('rememberMe','boolean'),
			array('password','authenticate'),//调用自己的写的authenticate方法
		);
	}
	public function authenticate($attribute,$params)
	{
		$this->_identity=new UserIdentity($this->username,  $this->password);//这里实例化了一个UserIdentity组件类,并调用了User.php模型类!
		if(!$this->_identity->authenticate())
		{
			$this->addError('password','用户名或密码错误。');
		}
	}
	
	public function attributeLabels()
	{
		return array(
			'username' => '用户名',
			'password' => '密码',
			'rememberMe'=>'Remember me next time',
		);
	}
	public function login()
	{
		if($this->_identity===NULL)
		{
			$this->_identity=new UserIdentity($this->username,  $this->password);
			$this->_identity->authenticate();
		}
		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
		{
			$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
			Yii::app()->user->login($this->_identity,$duration);
			return true;
		}
		else
			return false;
	}

}
?>

 

加载的组件类D:\wamp\www\yiitest\protected\components\UserIdentity.php

class UserIdentity extends CUserIdentity
{
	public function authenticate()
	{
		$users = User::model() -> findByAttributes(array('username'=>$this->username));
		if(!isset($users->username))
			$this->errorCode=self::ERROR_USERNAME_INVALID;
		elseif($users->password!==md5($this->password))
			$this->errorCode=self::ERROR_PASSWORD_INVALID;
		else
			$this->errorCode=self::ERROR_NONE;
		return !$this->errorCode;
	}
}

 

加载的模型类D:\wamp\www\yiitest\protected\models\User.php

<?php
class User extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return User the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'tbl_user';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('username, password, email', 'required'),
			array('username, password, email', 'length', 'max'=>128),
			array('profile', 'safe'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id, username, password, email, profile', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'posts' => array(self::HAS_MANY, 'Post', 'author_id'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'username' => 'Username',
			'password' => 'Password',
			'email' => 'Email',
			'profile' => 'Profile',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('username',$this->username,true);
		$criteria->compare('password',$this->password,true);
		$criteria->compare('email',$this->email,true);
		$criteria->compare('profile',$this->profile,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}


}

 

V:login.php视图

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'login-form',
	'enableClientValidation'=>true,
	'clientOptions'=>array(
		'validateOnSubmit'=>true,
	),
)); ?>

    <?php //echo $form->errorSummary($model); ?>
 
    <div class="row">
        <?php echo $form->label($model,'username'); ?>
        <?php echo $form->textField($model,'username') ?>
		<?php echo $form->error($model,'username'); ?>
    </div>
 
    <div class="row">
        <?php echo $form->label($model,'password'); ?>
        <?php echo $form->passwordField($model,'password') ?>
		<?php echo $form->error($model,'password'); ?>
    </div>
 
    <div class="row rememberMe">
        <?php echo $form->checkBox($model,'rememberMe'); ?>
        <?php echo $form->label($model,'rememberMe'); ?>
		<?php echo $form->error($model,'rememberMe'); ?>
    </div>
 
    <div class="row submit">
        <?php echo CHtml::submitButton('登 录',array('class'=>'btn btn-large')); ?>
    </div>
 
<?php $this->endWidget(); ?>
</div><!-- form -->

 

 

 

posted @ 2013-05-03 22:27  jami918  阅读(303)  评论(0编辑  收藏  举报