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

时间: 2024-08-28 16:11:37

Yii 1.1.17 实战入门(三)的相关文章

Yii 1.1.17 实战入门(六)

开启路由 1.在配置文件main.php的components中 定义如下: // 定义路由 'urlManager'=>array( // URL模式为PATHINFO 'urlFormat'=>'path', //隐藏index.php入口名 'showScriptName' => false, //路由规则 'rules'=>array( //要映射的前台地址 => 实际地址 的路由映射 'index.html' => array('index/index'),

Yii 1.1.17 实战入门(四)

属性标签与规则设置 当进入网站页面,将会读数据库返回信息到模板上.那么,现在定义模型中的属性在模板标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public function attributeLabels(){ return array( // '表字段' => '<label>标签的内容' 'username' => '用户名' ); } 这将为username属性生成一个<label>用户名</label>的提示标

Yii 1.1.17 实战入门(二)

用gii创建后台模块 1.启用gii,在config/main.php 'gii' => array( 'class' => 'system.gii.GiiModule', 'password' => 'Enter your password here', //设置密码 'ipFilters' => array('127.0.0.1', '::1'), ), 2.访问gii 在浏览器地址栏键入:127.0.0.1/yii/blog/index.php?r=模块名字,回车确定    

Yii 1.1.17 实战入门(五)

分页类使用 1.在控制器中, // 实例化 $criteria = new CDbCriteria(); $articleModel = Article::model(); // 分页 $total = $articleModel->count($criteria); //总记录数 $page = new CPagination($total); //实例化分页类 $page->pageSize = 3; //每页3条 $page->applyLimit($criteria); //截取

【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同时用MINA2和Netty4分别实现服务端的目的,是因为很多人都在纠结到底是用MINA还是Netty来实现高并发的Java网络通信服务端,在此干脆两个都实现了,就看你怎么选择了,够吊吧. NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,M

[swift实战入门]手把手教你编写2048(三)

上篇地址:swift实战入门之手把手教你编写2048(二) github地址:https://github.com/scarlettbai/2048.git. 今天给大家带来2048最后一篇,之前已经实现了向游戏区域中随机插入数字块,接下来要做的,就是当我们滑动屏幕时移动及合并数字块以及插入一个新的数字块.本篇的难点就是移动时的算法问题,首先来给大家讲一下算法. 2048的算法实现其实很简单,假如我们当前数字格的格式如下: | |4| | | | | |4| | |2| |2|2| |2| |

python机器学习实战(三)

python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7277205.html  前言 这篇博客是关于机器学习中基于概率论的分类方法--朴素贝叶斯,内容包括朴素贝叶斯分类器,垃圾邮件的分类,解析RSS源数据以及用朴素贝叶斯来分析不同地区的态度. 操作系统:ubuntu14.04 运行环境:anaconda-python2.7-jupyter notebook 参考书籍:机器学习实战和源码,机器学习(周志华) not

机器学习、深度学习的理论与实战入门建议整理

引言 拿到这份文档时想必你的脑海中一直萦绕着这么一个问题,"机器学习/深度学习要怎么学呢?(怎么入门,又怎么进一步掌握?)".关于这个问题其实并没有一个标准答案,有的人可能适合自底向上的学,也就是先从理论和数学开始,然后是算法实现,最后再通过一些项目去解决生活中的实际问题:有的人则可能适合自顶向下的学,也就是在弄清楚什么是机器学习及为什么学机器学习后,先确定一个系统性的用机器学习来解决实际问题的程序,然后找到一个合适的工具,接着再在各种数据集上做练习以不断加强自己的实践能力与巩固对算法

微信开发实战入门视频教程(Android4.4.2)

基于移动技术微信公众平台开发实战入门(Android4.4.2,微移动应用,项目实战) 适合人群:初级课时数量:40课时用到技术:微移动应用涉及项目:手机微信开发 qq:1840215592 课程内容简介微信腾讯公司推出的一个即时通讯服务的应用,微信提供公众平台.朋友圈.消息推送等功能,预计到2014年年底其注册用户量将突破10亿.面对一个用户数如此巨大的家伙,大家怎么能放过,都迫不及待的希望自己的应用能够跟微信产生一些联系.那么我们这套课程要讲的就是如何跟微信产生连接,如何将我们的网站接入到微