笔记自己整理的thinkphp笔记分析解析.docx
《笔记自己整理的thinkphp笔记分析解析.docx》由会员分享,可在线阅读,更多相关《笔记自己整理的thinkphp笔记分析解析.docx(45页珍藏版)》请在冰豆网上搜索。
![笔记自己整理的thinkphp笔记分析解析.docx](https://file1.bdocx.com/fileroot1/2023-6/13/5f5ffdf3-60c4-4b0c-be65-e74566cb28df/5f5ffdf3-60c4-4b0c-be65-e74566cb28df1.gif)
笔记自己整理的thinkphp笔记分析解析
Thinkphp
Lesson_1ThinkPHP.3.1.2.介绍及安装
1.总结
a)Home放前台,Admin放后台,Public放共有的资源
2.配置gvim
Ø打开安装目录下的_vimrc文件,添加
✧setnu!
显示行数
✧colorschemedarkblue背景颜色设置为深蓝色
Øgvim配置不自动生成备份文件
默认情况下用gVim编辑文件时,会自动生成带~的备份文件。
如果不想在编辑文件时自动生成备份文件的话,可以这么做:
打开gVim安装目录下的vimrc_example.vim,将其中的如下部分中的else语句用引号注释掉:
ifhas("vms")
setnobackup"donotkeepabackupfile,useversionsinstead
else
setbackup"keepabackupfile
即将上面四句改为:
ifhas("vms")
setnobackup"donotkeepabackupfile,useversionsinstead
"else
"setbackup"keepabackupfile
里,else部分用双引号注释掉即可。
setbackup是设置使用自动生成备份文件的命令。
Øwindows上gvim的编码设置
Windows系统默认的编码是cp936,所以用gvim一打开文件,默认是用gb2312编码打开的。
这导致很多时候打开的文件是乱码,不能正常显示,那要怎么解决这个问题呢?
很简单,看下面的设定:
打开gvim,到菜单栏找到“编辑”,在下拉菜单找到“启动设定”
点击“启动设定”进去,你会看到相应的配置文件
在文件的末尾加入如下设定:
setencoding=utf-8
setfileencodings=utf-8,chinese,latin-1
ifhas("win32")
setfileencoding=chinese
else
setfileencoding=utf-8
endif
source$VIMRUNTIME/delmenu.vim
source$VIMRUNTIME/menu.vim
languagemessageszh_CN.utf-8
保存后退出gvim,重新启动,惊喜出现了,乱码不见了,是不是很简单,可以动手试一试了!
3.ThinkPHP核心文件介绍
├─ThinkPHP.php框架入口文件
├─Common框架公共文件
├─Conf框架配置文件
├─Extend框架扩展目录
├─Lang核心语言包目录
├─Lib核心类库目录
│├─Behavior核心行为类库
│├─Core核心基类库
│├─Driver内置驱动
││├─Cache内置缓存驱动
││├─Db内置数据库驱动
││├─TagLib内置标签驱动
││└─Template内置模板引擎驱动
│└─Template内置模板引擎
└─Tpl系统模板目录
4.项目目录结构及说明
Home前台应用文件夹
├─Common项目公共文件目录
├─Conf项目配置目录
├─Lang项目语言目录
├─Lib项目类库目录
│├─ActionAction类库目录
│├─Behavior行为类库目录
│├─Model模型类库目录
│└─WidgetWidget类库目录
├─Runtime项目运行时目录
│├─Cache模板缓存目录
│├─Data数据缓存目录
│├─Logs日志文件目录
│└─Temp临时缓存目录
└─Tpl项目模板目录
Lesson_2ThinkPHP.3.1.2.MVC模式和URL访问
1.字符串串接的方法
使用’.’分割的两个字符串会在显示时串接起来
2.开启调试功能
有时由于缓存的原因,导致自己做的修改不能立即生效,此时删除Runtime文件夹即可,也可以开启调试模式,这样系统不会再缓存.但是建议在项目搭建到服务器时,关闭调试模式
Ø开启调试功能(在项目文件夹下的index.php中)
define('APP_DEBUG',true);
Ø我们需要设置配置文件(Conf/config.php),开启页面trace
'SHOW_PAGE_TRACE'=>true,//开启页面Trace
3.ThinkPHP的MVC对应的目录
M项目目录/应用目录/Lib/Model
V项目目录/应用目录/Tpl
C项目目录/应用目录/Lib/Action
4.url的4种访问方式
ØPATHINFO模式--重点!
!
!
!
!
!
http:
//域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2
例如:
http:
//localhost/thinkPHPTest/Index.php/Index/show/name/yinliang
访问的是\Home\Lib\Action\IndexAction.class.php的index方法,并将name=’yinliang’传递给后台
Ø普通模式
http:
//域名/项目名/入口文件?
m=模块名&a=方法名&键1=值1&键2=值2
例如:
http:
//localhost/thinkPHPTest/Index.php?
m=Index&a=show&name=yinliang&age=12
ØREWRITE模式
http:
//域名/项目名/模块名/方法名/键1/值1/键2/值2
Ø兼容模式
http:
//域名/项目名/入口文件?
s=模块名/方法名/键1/值1/键2/值2
Lesson_3,4ThinkPHP.3.1.2.输出和模型使用
1.配置项目文件详解(__ROOT__\Home\Conf\config.php)
'URL_PATHINFO_DEPR'=>'/',//修改URL的分隔符
'TMPL_L_DELIM'=>'<{',//修改左定界符
'TMPL_R_DELIM'=>'}>',//修改右定界符
'DB_TYPE'=>'mysql',//设置数据库类型
'DB_HOST'=>'localhost',//设置主机
'DB_NAME'=>'thinkphp',//设置数据库名
'DB_USER'=>'root',//设置用户名
'DB_PWD'=>'',//设置密码
'DB_PORT'=>'3306',//设置端口号
'DB_PREFIX'=>'tp_',//设置表前缀
'DB_DSN'=>'mysql:
//root:
@localhost:
3306/thinkphp',//使用DSN方式配置数据库信息
'SHOW_PAGE_TRACE'=>true,//开启页面Trace
'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名
'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次
'TMPL_DETECT_THEME'=>true,//自动侦测模板主题
'THEME_LIST'=>'your,my',//支持的模板主题列表
'TMPL_PARSE_STRING'=>array(//添加自己的模板变量规则
'__CSS__'=>__ROOT__.'/Public/Css',
'__JS__'=>__ROOT__.'/Public/Js',
),
'LAYOUT_ON'=>true,//开启模板渲染
'URL_CASE_INSENSITIVE'=>true,//url不区分大小写
'URL_HTML_SUFFIX'=>'html|shtml|xml',//限制伪静态的后缀
'APP_GROUP_LIST'=>'Home,Admin',//项目分组设定
'DEFAULT_GROUP'=>'Home',//默认分组
2.项目配置(__ROOT__\index.php)
php
//1.确定应用名称Home
define('APP_NAME','Home');
//2.确定应用路径
define('APP_PATH','./Home/');
//3.开启调试模式
define('APP_DEBUG',true);
//4.应用核心文件
require'./ThinkPHP/ThinkPHP.php'
?
>
3.获取表单中的数据
html中的form表单如下
用户名:
密 码:
验证码:
'+Math.random()">
获取表单数据的Action对象函数如下
publicfunctiondo_login(){
echo"fasdfasdfsd";
dump($_POST['username']);
}
注:
如果表单中的method="get",则上述函数中的$_POST要改为$_GET
4.超链接地址的写法
同项目下的超链接可不写ip地址如要访问项目thinkphp下的UserAction中的delete函数,可写为
id=<{$vo.id}>">delete
但是为了防止因项目名称(thinkphp)的更改,导致系统不能使用,可使用”__URL__”替换”/thinkphp/index.php/User/”,如以上地址改写为
id=<{$vo.id}>">delete
5.ThinkPHP3的输出
a)通过echo等PHP原生的输出方式在页面中输出
b)通过display方法输出,如
想分配变量可以使用assign方法,如在Action中
php
//本类由系统自动生成,仅供测试用途
classIndexActionextendsAction{
publicfunctionindex(){
$this->assign('name','yinliang');//给变量name分配值yinliang
$this->display();//输出Home\Tpl\Index\index.html
}
publicfunctionshow(){
echo"show:
helloworld!
!
!
";
}
}
?
>
html页面中显示的方法:
在Home\Tpl\Index\index.html中要访问name变量可以在文件中添加{$name}(修改了左右定界符的则把{,}分别修改为修改后的左右定界符)
如:
Hello{$name}
6.建议修改左右定界符(为了防止{$data}与Jquery语法混淆)
休要修改配置文件(Conf/config.php)中的配置项
'TMPL_L_DELIM'=>'<{',//修改左定界符
'TMPL_R_DELIM'=>'}>',//修改右定界符
7.ThinkPHP3的模型使用(与数据库链接,操作数据库)
a)创建数据库的步骤
i.进入phpmyadminURL为http:
//127.0.0.1/phpmyadmin/
ii.点击数据库标签跳转到创建数据库的页面
iii.左侧的输入框输入数据库的名字(例如thinkphp3),右侧选择数据库编码为utf8_general_ci点击创建
iv.点击创建的数据库(例如thinkphp3),即可创建表
v.先输入要创建的表的名字,再输入标的字段数,点击执行
vi.接下来的页面A_I表示自增,索引下拉列表可以选择主键,唯一等属性,整理表示编码格式
vii.存储引擎选择MyISAM
viii.……………………………..
b)配置数据库(在Conf/config.php中配置数据库相关信息)
'DB_TYPE'=>'mysql',//设置数据库类型
'DB_HOST'=>'localhost',//设置主机
'DB_NAME'=>'thinkphp',//设置数据库名
'DB_USER'=>'root',//设置用户名
'DB_PWD'=>'',//设置密码
'DB_PORT'=>'3306',//设置端口号
'DB_PREFIX'=>'tp_',//设置表前缀加表前缀是为了更好的区分表,比如cw_代表财务cg_代表采购,如果没有表前缀,则将tp_去掉即可
注:
也可以使用DSN方法进行配置
'DB_DSN'=>'mysql:
//root:
@localhost:
3306/thinkphp',//使用DSN方式配置数据库信息
如果两种方式同时存在,以DSN方式为优先
c)在Action的index函数中获取值
publicfunctionindex(){
$m=newModel(User);//记住U大写
$arr=$m->select();//user表中的所有数据都被放到数组$arr中
$this->assign('name',$arr[1]['username']);//将name赋值为数组$arr中下标为//1的元素的username的值
$this->display();
}
d)还有一种简单实用模型的方式
M()等效为newModel();
$m=M('User');
$arr=$m->select();
e)使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行增删改查CURD
增-CCreate$m->add()
删-DDelete$m->delete()
改-UUpdate$m->save()
查-RRead$m->select()
f)模板可以遍历数组:
html页面中
<{$vo.id}>----<{$vo.username}>-----<{$vo.sex}>
在Action中的index中给array赋值
publicfunctionindex(){
$m=newModel('User');
$arr=$m->select();
$this->assign('array',$arr);
$this->assign('name',$arr[1]['username']);
$this->display();
}
Lesson_5,6,7ThinkPHP.3.1.2.输出和模型使用.2
1.ThinkPHP3.1.2CURD特性
a)ThinkPHP3读取数据
对数据的读取Read
$m=newModel('User');
$m=M('User');
select
$m->select();//获取所有数据,以数组形式返回
find
$m->find($id);//获取单条数据
getField(字段名)//获取一个具体的字段值
$arr=$m->where('id=2')->getField('username');
b)ThinkPHP3创建数据
对数据的添加Create
$m=newModel('User');
$m=M('User');
$m->字段名=值
$m->add();
返回值是新增的id号
代码示例:
publicfunctionadd(){
$m=newModel('User');
$m->username=$_POST['username'];
$m->sex=$_POST['sex'];
$newId=$m->add();
if($newId>0){
$this->success("Addnewusersuccessfully!
!
!
",index);
}else{
$this->error("Addnewuserfailed!
!
!
",index);
}
}
c)ThinkPHP3删除数据
$m=M('User');
$m->delete
(2);//删除id为2的数据
$m->where('id=2')->delete();//与上面效果相同,也是删除id为2的数据
返回值是受影响行数
代码示例:
publicfunctiondelete(){
$id=$_GET['id'];
$m=newModel('User');
var_dump($id);
//$m->delete(11);
$count=$m->where('id='.$_GET['id'])->delete();
if($count>0){
$this->success("Datahavebeendeletesuccessfully!
!
!
");
//$this->success("数据删除成功!
!
!
");
}else{
$this->error("Theoperationofdeletingdataexiterror!
!
!
");
//$this->error("数据删除失败!
!
!
");
}
}
d)ThinkPHP3更新数据
$m=M('User');
$data['id']=1;
$data['username']='ztz2';
$m->save($data);
返回值是受影响行数
代码示例:
publicfunctionupdate(){
$m=newModel('User');
$data['id']=$_POST['id'];
$data['username']=$_POST['username'];
$data['sex']=$_POST['sex'];
$count=$m->save($data);
if($count>0){
$this->success("Datahavebeenmodifysuccessfully!
!
!
",index);
}else{
$this->error("Theoperationofmodifingdataexiterror!
!
!
",index);
}
}
Lesson_8,9,10ThinkPHP.3.1.2.查询方式的一般使用
1.ThinkPHP3.1.2查询方式
a)find只能查询一天记录,select可以查询多条记录
i.普通查询方式
ii.字符串
$arr=$m->where("sex=0andusername='gege'")->find();
iii.数组
$data['sex']=0;
$data['username']='gege';
$arr=$m->where($data)->find();
注意:
这种方式默认是and的关系,如果使用or关系,需要添加数组值
$data['sex']=0;
$data['username']='gege';
$data['_logic']='or';
iv.表达式查询方式
$data['id']=array('lt',6);
$arr=$m->where($data)->select();
EQ等于
NEQ不等于
GT大于
EGT大于等于
LT小于
ELT小于等于
示例代码:
publicfunctionshow(){
$m=newModel('User');
$data['id']=array("LT",25);
$arr=$m->where($data)->select();
var_dump($arr);
$this->display();
}
b)LIKE模糊查询
$data['username']=array('like','%ge');//查询username以ge结尾的user
$data['username']=array('like','%ge%');//查询username包含ge的user
$arr=$m->where($data)->select();
c)NOTLIKE
$data['username']=array('notlike','%ge%');//查询username不包含ge的user
$arr=$m->where($data)->select();
✧注意:
如果一个字段要匹配多个通配符
$data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系
$arr=$m->where($data)->select();
d)BETWEEN
$data['id']=array('between',array(5,7));
$arr=$m->where($data)->select();
//SELECT*FROM`tp_user`WHERE((`id`BETWEEN5AND7))
$data['id']=array('notbetween',array(5,7));//注意,not和between中间一定要有空格
$arr=$m->where($data)->select();
e)IN
$data['id']=array('in',array(4,6,7));
$arr=$m->where($data)->select();
//SELECT*FROM`tp_user`WHERE(`id`IN(4,6,7))
$data['id']=arra