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));
Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成的更多相关文章
- Yii 1.1.17 二、Gii创建后台与后台登录验证
一.用Gii创建后台模块 1.启用gii,在config/main.php 'gii' => array( 'class' => 'system.gii.GiiModule', 'pass ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口
根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息. 所以就需要一个模型类,里面包含了基本信息.图片信息.等各种详情页面的信 ...
- Druid 0.17入门(4)—— 数据查询方式大全
本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...
- Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库
一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...
- Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库
一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...
- Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查
Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据 Django的ORM系统分析 ORM概念:对象关系映射(Objec ...
- HTTPD三种工作模型
HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...
- 『MXNet』第三弹_Gluon模型参数
MXNet中含有init包,它包含了多种模型初始化方法. from mxnet import init, nd from mxnet.gluon import nn net = nn.Sequenti ...
- Netty Reator(三)Reactor 模型
Netty Reator(三)Reactor 模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 本文介绍 DC Sch ...
随机推荐
- bzoj4502 串
题意:给你n(n<=10000)个字符串,每个字符串的长度不超过30,可以选择两个非空前缀把它们拼起来得到一个字符串(这两个前缀可以来自同一个字符串,也可以是同一个字符串的同一个非空前缀),问得 ...
- 【bzoj1877】[SDOI2009]晨跑 费用流
题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...
- 状态压缩---UVA6625 - Diagrams & Tableaux
比赛的时候刷出来的第一个状态DP.(期间有点没有把握是状态DP呢.) 题意:题意还是简单的.K行的方格.之后输入L1~LK 代表每一行方格数.在这些往左紧挨的方格子里填上1~N的数字. 其中右边格子的 ...
- BZOJ5322:[JXOI2018]排序问题——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5322 https://loj.ac/problem/2543 <-可以看数据,要没有这数据我 ...
- Eclipse NDK 打印LOG信息(都在jni目录下操作)
http://blog.csdn.net/u013045971/article/details/46448975 1 在.c文件中,引用头文件,定义TAG.LOG宏: #include <and ...
- 配置好solr搜索引擎服务器后java后台如何将商品信息导入索引库
首先,在配置文件目录中添加solr 服务器的bean 配置文件 solr服务器的url可以写在配置文件中: url地址其实就是我们网页可以访问的solr地址: 然后我们写 service packag ...
- 关于equals与hashcode的重写
我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...
- stout代码分析之九:c++11容器新特性
stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者p ...
- bzoj 2654 tree 二分+kruskal
tree Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2739 Solved: 1126[Submit][Status][Discuss] Des ...
- HDU3251 最大流(最小割)
Being a Hero Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...