Yii框架学习笔记.docx
《Yii框架学习笔记.docx》由会员分享,可在线阅读,更多相关《Yii框架学习笔记.docx(38页珍藏版)》请在冰点文库上搜索。
Yii框架学习笔记
Yii框架:
1
Day011
1、安装1
1.2安装yii框架及自动生成project1
2.目录结构:
1
3.url地址规则:
2
4.控制器编写规则:
2
4.2Controller方法:
2
4.2.2生成url地址2
4.2.3跳转提示3
《例1.1》添加文章表单分析3
《例1.2》NewsController.php----actionAdd()3
《例1.3》add.php3
《例1.4》---->数据处理actionSave()4
《例1.5》actionOper()4
《例1.6》model5
Day025
1.C层编写规则:
(复习)5
2.基类提供的方法:
(复习)6
3.V层编写:
6
3.1分组6
3.1.1、修改配置文件gii6
3.1.2、浏览器url地址输入***/index.php?
r=gii6
3.1.3、说明:
6
4.M层7
4.1、数据库连接如何实现7
4.2、数据模型类封装的规则7
4.3学习基类CActiveRecord的方法:
7
4.3.1查询7
4.3.1.1例子:
8
4.3.2增8
4.3.3删9
4.3.4改9
Day039
1.分组(复习)9
2.m层封装:
10
2.1规则10
《例2.1》model层News.php10
2.2基类CActiveRecored的方法:
10
2.2.1增10
2.2.2删11
2.2.3改11
2.2.4查11
《例2.2》NewsController.php12
3.后台访问控制:
13
《例3.1》indexController14
4表单的生成(助手类CActiveForm):
15
4.1生成表单元素15
《例4.1》自动生成注册页面16
《例4.2》提示语变成中文:
labelEx(17
5.数据验证:
18
《例5.1》functionrules()18
5.2会员模块实例(会员管理删除屏蔽审核):
19
《例5.2.1》userController19
《例5.2.2》user-->oper.php20
Day0321
1.分页21
1.1分页(步骤)21
《例1.1》分页的实现22
《例1.2》oper.php22
2.验证码23
2.1在控制器中加actions方法23
《例2.1》23
2.2模板上显示:
24
《例2.2》24
2.3、比较24
3.图片上传24
3.1方法:
24
3.1.1构造方法,指定文件保存的目录,大小,类型24
3.1.2保存文件upload()遍历$_FILES,返回值bool25
3.1.3获取文件信息25
3.1.4获取文件的报错信息25
Yii框架:
(基于MVC框架)
Day01
1、安装
解压
使用yiic.php安装,yiic运行,不是通过url地址。
通过cmd窗口运行php程序?
1、跳转工作目录到php.exe所在的目录
2、php.exe-r"php语句;"
echo'123';
运行一个php程序
php.exe-f"php文件的路径"
运行yiic.php
php.exe-fF:
/psd1511/www/14_yii/framework/yiic.php
webappF:
/psd1511/www/14_yii/shop
win8win7win10打开cmd窗口以管理员身份。
具体安装
1.2安装yii框架及自动生成project
1.解压源码包复制framwork文件(与项目文件同级)
2.在开始--->cmd--->右键cmd.exe--->点击以管理员身份运行
3.找到php5.4安装目录下的php.exe===>复制路径D:
\php-5.4.0-Win32-VC9-x86
4.在cmd中输入:
cdD:
/php-5.4.0-Win32-VC9-x86
5.在cmd中运行php.exe;找到yiic.php文件目录webapp
6.Php.exe-fF:
/psd1511/www/14_yii/framework/yiic.php
webappF:
/psd1511/www/14_yii/project
2.目录结构:
assets静态文件jsupload
css样式文件目录
images图片文件夹
protected
runtime
controllers
views
models
index.php
3.url地址规则:
http:
//localhost/14_yii/shop/index.php?
r=site/contact
4.控制器编写规则:
1、protected/controllers/XxxController.php
2、类名和类文件名同名
3、继承基类Controller
4、方法名actionXxx()
指定默认的控制器及方法:
'defaultController'=>"控制器/方法"
'defaultController'=>"方法"
4.2Controller方法:
传值
显示模板
$this->render("模板名称"[,array()]);
渲染了布局
公共内容,拆分在一个文件中,文件叫布局文件。
布局文件:
imponents/Controller.php
public$layout='//layouts/my';
模板的路径:
views/控制器名/模板名称.php
$this->renderPartial("模板名称"[,array()]);
特点:
不渲染布局
4.2.2生成url地址
$this->createUrl("分组/控制器/方法",array('id'=>5));
4.2.3跳转提示
提示
Yii:
:
app()->user->setFlash('名称',"message");
作用:
产生提示语
Yii:
:
app()->user->getFlash("名称");
作用:
获取提示语
Yii:
:
app()->user->hasFlash("名称");
作用:
判断一个提示语是否存在
跳转:
$this->redirect("url地址");
header("location:
url地址");
《例1.1》添加文章表单分析,
提交,数据处理,提示跳转,列表页中显示结果。
添加文章的表单:
NewsController.php
|
actionAdd()
|
add.php---->数据处理actionSave()
|判断标题非空,添加成功
|产生提示语
|
actionOper()
|显示提示语
|显示文章列表
Oper.php
《例1.2》NewsController.php----actionAdd()
classNewsControllerextendsController{
//public$layout="//layout/my";//重写公共部分
functionactionAdd(){
$this->render('add');
}
《例1.3》add.php
phpecho$this->createUrl("News/save");?
>"method="post">
《例1.4》---->数据处理actionSave()
functionactionSave(){
if(!
empty($_POST['title'])){
//提示语
yii:
:
app()->user->setFlash('info',"添加成功");
}else{
yii:
:
app()->user->setFlash('info',"添加失败");
}
//跳转
$this->redirect($this->createUrl("News/oper"));
}
《例1.5》actionOper()
functionactionOper(){
//获取文章列表数据
$newsob=News:
:
model();
$cob=newCDbCriteria;//管理字段类
$cob->select="id,title";//字段列表
$cob->order="iddesc";//排序
$cob->offset="0";
$cob->limit="5";
//$cob->group="";//分组
$arr=$newsob->findAll($cob);
$this->render("oper",array('arr'=>$arr));
}
《例1.6》model
php
classNewsextendsCActiveRecord{
public$title;
public$type;
public$content;
public$addtime;
publicstaticfunctionmodel($className=__CLASS__){
returnparent:
:
model($className);
}
publicfunctiontableName(){
return"{{news}}";
}
}
Day02
url规则:
***/index.php?
r=分组名/控制器/方法&id=5
1.C层编写规则:
(复习)
1、protected/controllers/XxxController.php
2、类名和类文件名同名
3、继承Controller
4、方法名actionXxx
public$layout="//layouts/名";
'defaultControler'=>"控制器/方法"
2.基类提供的方法:
(复习)
render("模板名称",array())
renderPartial("模板名称",array())
createUrl("分组/控制器/方法",array('id'=>5))
提示
Yii:
:
app()->user->setFlash("名","值");
Yii:
:
app()->user->getFlash('名');
Yii:
:
app()->user->hasFlash('名');
跳转
redirect("url")
3.V层编写:
直接嵌套php标签,对变量进行处理,显示页面。
3.1分组
3.1.1、修改配置文件gii
'modules'=>array(
//uncommentthefollowingtoenabletheGiitool
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'123456',
//Ifremoved,Giidefaultstolocalhostonly.Editcarefullytotaste.
'ipFilters'=>array('127.0.0.1',':
:
1'),
),
),
3.1.2、浏览器url地址输入***/index.php?
r=gii
3.1.3、说明:
后台默认的控制器,DefaultController,默认的方法actionIndex
访问的布局文件是protected/views/layouts/main.php
public$layout="//";
//----protected/views/layouts
/-----protected/modules/admin/views/layouts
4.M层
4.1、数据库连接如何实现
'db'=>array(
'connectionString'=>'mysql:
host=localhost;dbname=project',
'emulatePrepare'=>true,
'username'=>'root',
'password'=>'root',
'charset'=>'utf8',
'tablePrefix'=>'',
),
测试连接是否成功:
Yii:
:
app()->db
4.2、数据模型类封装的规则
protected/models/表名.php
例子:
News.php
a.类名和类文件名一致
b.必须继承CActiveRecord类
c.必须有一个静态方法
publicstaticfunctionmodel($className=__CLASS__){
returnparent:
:
model($className);
}
指定表名称
publicfunctiontableName(){
return"{{表名}}";
}
双花括号作用,加前缀。
产生对象
4.3学习基类CActiveRecord的方法:
4.3.1查询
$modelOb=find($condition[,$params])查询一条记录
$arr=$modelOb->attributes;
string$modelOb->字段名;
findAll($condition[,$params])查询多条记录
findByPk($pk)根据主键id值,获取一条记录
findAllByPk(array(pk1,pk2,pk3))根据主键id值,获取多条记录
4.3.1.1例子:
文章列表
倒序orderbyiddesc
sql语句的子句,靠CDbCriteria
$cOb=newCDbCriteria();
$cOb->select="";//字段列表
$cOb->order="iddesc";//排序
$cOb->condition="";//条件子句
$cOb->params=array();//给占位符绑定数据
$cOb->group="";//分组
$cOb->having="";//分组筛选
$cOb->alias="";
$cOb->join="";//多表联查
$cOb->limit="";//长度
$cOb->offset="";//指定的是开始位置
例子:
产品列表id,title,addtime,tname,显示分类的名称
selectp.id,p.title,p.addtime,t.tnamefromproductasp
jointypetonp.tid=t.idlimit0,10
count()//获取记录总数
4.3.2增
$mOb=new类名();//?
?
?
_new=true;
$mOb->字段名=值;
$re=$mOb->save()
//获取主键id值
int$mOb->getPrimaryKey();
例子:
添加文章
4.3.3删
实例化数据模型类
$mOb=new类名()
$mOb=类名:
:
model();
$mOb->findByPk(pk);
bool$mOb->delete();
//没有参数,怎么指定删除谁。
//删除谁,找到谁。
$mOb->deleteByPk($pk);
4.3.4改
findByPk(pk)
update($arr)
//没有参数来指定条件,修改谁,找到谁。
updateByPk(pk,$arr)
PDO预处理
query()
exec()
$pdoS=prepare("select*fromnewswhereid=:
id");
bool$pdoS->execute(array(':
id'=>5));
$arr=$pdoS->fetchAll(PDO:
:
FETCH_ASSOC);
Day03
1.分组(复习)
1、配置gii
2、修改密码
3、index.php?
r=gii
4、按提示操作
默认的布局
控制器中,public$layout="/layouts/admin";
默认控制器方法:
DefaultController
actionIndex()
分组admin的入口文件AdminModule.php中,修改init(){
$this->defaultControler="Index/index";
}
2.m层封装:
2.1规则
1、protected/models/Xxx.php
2、文件名和类名一致
3、继承CActiveRecord
4、publicstaticfunctionmodel($className=__CLASS__){
returnparent:
:
model($className);
}
publicfunctiontableName(){
return"{{表名}}";
}
《例2.1》model层News.php
php
classNewsextendsCActiveRecord{
public$title;
public$type;
public$content;
public$addtime;
publicstaticfunctionmodel($className=__CLASS__){
returnparent:
:
model($className);
}
publicfunctiontableName(){
return"{{news}}";
}
}
2.2基类CActiveRecored的方法:
2.2.1增
$mOb=new类名();
有数据
$mOb->字段名=值;
......
执行增加操作
bool$mOb->save();
int$mOb->getPrimaryKey();//获取主键id
2.2.2删
$mOb=new类名();
$ob=$mOb->findByPk($id);
$re=$ob->delete();
$mOb->deleteByPk($id);
2.2.3改
$mOb=类名:
:
model();
$ob=$mOb->findByPk($id);
$ob->update($arr)
$mOb->updateByPk($id,$arr)
2.2.4查
$mOb=类名:
:
model();
$mOb->find(condition,params)
array$mOb->findAll(condition,params);
$ob=$mOb->findByPk(pk);
获取对象中的记录:
$ob->字段名
$ob->attributes
$cOb=newCDbCriteria();
$cOb->select=""
$cOb->order="";
$cOb->condition=""
$cOb->params=array()
$cOb->group=""
$cOb->having=""
$cOb->offset="";
$cOb->limit="";
$cOb->join="";
$cOb->alias="";
《例2.2》NewsController.php
php
classNewsControllerextendsController{
public$layout="/layouts/admin";
functionactionAdd(){
$this->render("add");
}
functionactionSave(){
//var_dump($_POST);
$newsOb=newNews();
$newsOb->title=$_POST['title'];
$newsOb->type=$_POST['type'];
$newsOb->content=$_POST['content'];
$newsOb->addtime=time();
$re=$newsOb->save();
if($re){
Yii:
:
app()->user->setFlash("info","文章添加成功");
}else{
Yii:
:
app()->user->setFlash("info","文章添加失败");
}
$this->redirect($this->createUrl('News/oper'));
}
functionactionOper(){
//获取文章列表数据数据,带有分类名称
$newsOb=News:
:
model();
$cOb=newCDbCriteria();
$cOb->select='id,title,type';
$cOb->order="iddesc";
$cOb->offset=0;
$cOb->limit=10;
$arr=$newsOb->findAll($cOb);