首页 > 代码库 > Yii 1.1.17 实战入门(三)

Yii 1.1.17 实战入门(三)

数据库连接

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‘));

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

 

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

 

 

登录验证

将操作以下两个文件:

protected/models/LoginForm.php

protected/components/UserIdentity.php

参照源码进行修改即可。

 

1、控制器中执行:

$loginForm = new LoginForm(); 和

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

 

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

 

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里面的模块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));

 

Yii 1.1.17 实战入门(三)