zoukankan      html  css  js  c++  java
  • 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 -->
    
  • 相关阅读:
    TextBox类的成员
    【VB.Net】字节数与字符数的取得
    限制文本框的输入类型
    【转】FxCop 设计规则
    【Spread Sheet 应用(三)】Enter移向下一个单元格
    【ASP.NET】打开关闭新窗体
    常用字符对应ASCII码值
    初识CodeSmith分享两个模板
    【VB.NET】自定义控件(一)属性说明
    LeetCode: Length of Last Word
  • 原文地址:https://www.cnblogs.com/jami918/p/3058449.html
Copyright © 2011-2022 走看看