zoukankan      html  css  js  c++  java
  • Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成

    一、数据库连接

    1、配置连接参数

    在database.php里面开启:

    'db' => array(
      'connectionString' => 'mysql:host=127.0.0.1;dbname=blog',
      'emulatePrepare' => true, // PDO扩展
      'username' => 'root',
      'password' => '',
      'charset' => 'utf8',
      'tablePrefix' => 'yii_', // 表前缀
      'enableParamLogging' => true // 开启SQL调试信息
    ),

     更多配置在 framework/db/CDbConnection.php中 可以找到

    2、测试连接

    用 var_dump(Yii::app()->db);可以测试数据库是否连接成功

    二、定义模型与查询数据

    1、定义模型

    位置:protected/models/

    名称:admin.php

    内容:模型必须有两个方法 —— model() 与 tableName(),如下。

    class Admin extends CActiveRecord{
      // 必需方法1。返回模型
      public static function model($className = __CLASS__){
        return parent::model($className);
      }
    
      // 必须方法2。返回表名
      public function tableName(){
        return "{{admin}}"; //返回yii_admin表名
      }
    }
    

    2、查询

    举个栗子,在控制器中调用用户信息:

    Admin::model()->find('username = :name' , array(':name => 'admin'));

    对于返回的数据,建议打印出来看一下,方便操作每个字段。

    注意:Yii的 ActiveRecord 基类模型采用了对象化,表映射到模型,记录映射到对象,表或记录的字段映射到模型或对象的属性,所以用访问属性的方法可以访问到字段。

    三、登录验证

    将操作以下两个文件:

    protected/models/LoginForm.php

    protected/components/UserIdentity.php

    参照源码进行修改即可。

    1、控制器中执行:

    $loginForm = new LoginForm();

    $loginForm()->login();       // 进行登录验证

    注意:LoginForm 是 Yii 默认带有的一个登录模型,这个模型可以对登录表单进行验证,可以修改为映射到后台用户表的 admin 模型,强迫症可以改为 admin.php,实例化的时候 new Admin() 就行。

    /**
     * 登录视图及登录表单处理
     * @return [type] [description]
     */
    public function actionIndex(){
    	$loginForm = new LoginForm(); // 实例化LoginForm
    
    	// 登录表单处理
    	if(isset($_POST['LoginForm'])){
    		$loginForm->attributes = $_POST['LoginForm']; // 压入需要验证的POST数据
    
    		if($loginForm->validate() && $loginForm->login()){ //验证通过
    			Yii::app()->session['logintime'] = time(); //写session,记录当前登录时间
    
    			$this->redirect(array('default/index'));
    		}
    	}
    
    	$this->render('index', array('loginForm' => $loginForm)); //渲染模板(没有布局),分配模板变量loginForm模型
    }
    

      

    2、在 LoginForm模型中,rules() 方法定义规则:

    public function rules()
    {
      return array(
        array('password', 'authenticate'), //自定义 authenticate()方法验证
      );
    }
    public function authenticate($attribute, $params)
    {
      if(!$this->hasErrors())
      {
        $this->_identity = new UserIdentity($this->username, $this->password); 
        if(!$this->_identity->authenticate())
        $this->addError('password','用户名或密码错误');
      }
    }
    

    3、UserIdentity 类进行判断与返回错误

    这是它的authenticate()方法,辅助上面LoginForm模型中的authenticate()方法进行密码验证

    public function authenticate()
    {
      $user= User::model()->find('username = :name', array(':name' => $this->username));
    
      if(!$user){                                       // 用户名错误
        $this->errorCode = self::ERROR_USERNAME_INVALID;
      }
      else if($user->password != md5($this->password)){ // 密码错误
        $this->errorCode = self::ERROR_PASSWORD_INVALID;
      }
      else{
        $this->errorCode = self::ERROR_NONE;           // 验证通过
      }
      return !$this->errorCode;                         // 真通过,假失败
    }
    

       

    四、登录信息调取

    Yii::app()->user->name; // 登录后存储在 session 中的用户名

    注意前后台用户区分,需要设置:(以后台模块 admin 为例)

    在 modules/admin/AdminModule.php 文件中的 init() 方法添加代码:

    Yii:app()->setComponents(array(
      'user' => array('stateKeyPrefix' => 'admin')
    ));

    五、Session使用

    存储:

      Yii::app()->session['logintime'] = time();

    调用:

      Yii::app()->session['logintime']

    清除:

      Yii::app()->session->clear();

      Yii::app()->session->destory();

    退出登录:

      Yii::app()->user->logout(); //退出登录,清除SESSION

    六、URL跳转与生成

    URL跳转:

      $this->redirect(array('控制器名/方法名'));

    URL生成:

      在视图中调用,$this->createUrl('控制器/方法', array('id' => 2));

  • 相关阅读:
    Win7下IE 8内存保护可能导致ActiveX无法安装的问题及其解决方法
    为Windows Server 2000开发和部署ASP.NET 3.5的应用程序
    MOSS 2010:如何为列表设计Infopath表单用于编辑和显示
    Windows Live is designed for you, but maybe not for your browser
    Meet the new WSS SharePoint Foundation 2010
    MOSS 2010: Visual Studio 2010开发体验(3)——调试代码
    MOSS 2010:Visual Studio 2010开发体验(10)——列表开发之内容类型
    MOSS 2010:谁动了我的“共享服务”
    MOSS 2010:通过SharePoint Designer定制列表项的条件格式
    如何访问嵌套母版页中的控件
  • 原文地址:https://www.cnblogs.com/mingc/p/6747301.html
Copyright © 2011-2022 走看看