一、数据库连接

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

Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成的更多相关文章

  1. Yii 1.1.17 二、Gii创建后台与后台登录验证

    一.用Gii创建后台模块 1.启用gii,在config/main.php 'gii' => array( 'class' => 'system.gii.GiiModule', 'pass ...

  2. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口

    根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息. 所以就需要一个模型类,里面包含了基本信息.图片信息.等各种详情页面的信 ...

  3. Druid 0.17入门(4)—— 数据查询方式大全

    本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...

  4. Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库

    一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...

  5. Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库

    一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...

  6. Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

    Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据   Django的ORM系统分析 ORM概念:对象关系映射(Objec ...

  7. HTTPD三种工作模型

    HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...

  8. 『MXNet』第三弹_Gluon模型参数

    MXNet中含有init包,它包含了多种模型初始化方法. from mxnet import init, nd from mxnet.gluon import nn net = nn.Sequenti ...

  9. Netty Reator(三)Reactor 模型

    Netty Reator(三)Reactor 模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 本文介绍 DC Sch ...

随机推荐

  1. 第22天:js改变样式效果

    一.输出语句 1.alert:弹出警示框(用的非常少,用户体验不好)完整写法:window.alert(“执行语句”):window对象,窗口,一般情况可省略alert(123); 2.console ...

  2. fzu1686-神龙的难题

    给出一个n\times m的01矩阵,以及\(h,w\),表示一次可以把矩阵的一个\(h\times w\)的小矩阵变为全0,问至少要多少次可以把整个矩阵变为全0.\(n,m\le 15\). 分析 ...

  3. BZOJ 1786 配对(DP)

    如果我们直接令dp[i][j]为前i个位置第i个位置填j所产生的逆序对的最少数.这样是不满足无后效性的. 但是如果发现对于两个-1,如果前面的-1填的数要大于后面的-1填的数.容易证明把他们两交换结果 ...

  4. Django错误 OperationalError: no such column: xxx

    模型前后操作如下: 第一次迁移: class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) titl ...

  5. Springboot2.x+shiro+redis(Lettuce)整合填坑

    主要记录关键和有坑的地方 前提: 1.SpringBoot+shiro已经集成完毕,如果没有集成,先查阅之前的Springboot2.0 集成shiro权限管理 2.redis已经安装完成 3.red ...

  6. 【题解】Atcoder AGC#16 E-Poor Turkeys

    %拜!颜神怒A此题,像我这样的渣渣只能看看题解度日╭(╯^╰)╮在这里把两种做法都记录一下吧~ 题解做法:可以考虑单独的一只鸡 u 能否存活.首先我们将 u 加入到集合S.然后我们按照时间倒序往回推, ...

  7. CF#312 558e A Simple Task

    ~~~题面~~~ 题解: 观察到字母只有26个,因此考虑对这26个字母分别维护,每个线段树维护一个字母,如果一个线段树的某个叶节点有值,表示当前叶节点所在位置的字母是现在这个线段树代表的字母. 那么对 ...

  8. php写错命名空间 导致catch不到异常

    写的微信回调接口出错了, 由于手里的调试工具(包括微信官方的开发者接口调试工具)不能把HTTP错误的详情dump出来,只会显示空白,所以打算在程序里加上try catch 捕获错误直接输出.重新测试, ...

  9. HDOJ.2955 Robberies (01背包+概率问题)

    Robberies 算法学习-–动态规划初探 题意分析 有一个小偷去抢劫银行,给出来银行的个数n,和一个概率p为能够逃跑的临界概率,接下来有n行分别是这个银行所有拥有的钱数mi和抢劫后被抓的概率pi, ...

  10. [BZOJ3523][Poi2014]KLO-Bricks——全网唯一 一篇O(n)题解+bzoj最优解

    Description 有n种颜色的砖块,第i种颜色的砖块有a[i]个,你需要把他们放成一排,使得相邻两个砖块的颜色不相同,限定第一个砖块的颜色是start,最后一个砖块的颜色是end,请构造出一种合 ...