Thinkphp笔记
更新时间:2024-01-14 13:48:01 阅读量: 教育文库 文档下载
Thinkphp
1. 配置gvim
?
打开安装目录下的_vimrc文件,添加 ? set nu! 显示行数 ? colorscheme darkblue 背景颜色设置为深蓝色 ? gvim配置不自动生成备份文件
默认情况下用gVim编辑文件时,会自动生成带~的备份文件。如果不想在编辑文件时自动生成备份文件的话,可以这么做:打开gVim安装目录下的vimrc_example.vim,将其中的如下部分中的else语句用引号注释掉: if has(\
set nobackup \else
set backup \即将上面四句改为: if has(\
set nobackup \\
\ \里,else部分用双引号注释掉即可。set backup是设置使用自动生成备份文件的命令。 ? windows上gvim的编码设置
Windows系统默认的编码是cp936,所以用gvim一打开文件,默认是用gb2312编码打开的。这导致很多时候打开的文件是乱码,不能正常显示,那要怎么解决这个问题呢?很简单,看下面的设定: 打开gvim,到菜单栏找到“编辑”,在下拉菜单找到“启动设定”
点击 “启动设定” 进去,你会看到相应的配置文件
在文件的末尾加入如下设定: set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1 if has(\
set fileencoding=chinese else
set fileencoding=utf-8 endif
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8
保存后退出gvim,重新启动,惊喜出现了,乱码不见了,是不是很简单,可以动手试一试了!
2. 配置项目文件(__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', //默认分组
3. 项目配置(__ROOT__\\index.php)
?>
//3.开启调试模式
define('APP_DEBUG',true); //4.应用核心文件
require './ThinkPHP/ThinkPHP.php'
4. 开启调试功能
? ?
开启调试功能(在项目文件夹下的index.php中) define('APP_DEBUG',true);
我们需要设置配置文件(Conf/config.php),开启页面trace 'SHOW_PAGE_TRACE'=>true,//开启页面Trace
5. url的4种访问方式
? ? ? ?
PATHINFO 模式 -- 重点!!!!!!
http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2 普通模式
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2 REWRITE模式
http://域名/项目名/模块名/方法名/键1/值1/键2/值2 兼容模式
http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2
6. 获取url中的参数
$id=$_GET['id'];
7. 获取表单中的数据
html中的form表单如下
获取表单数据的Action对象函数如下 public function do_login(){ echo \ dump($_POST['username']); }
注:如果表单中的method=\则上述函数中的$_POST要改为$_GET
8. 超链接地址的写法
同项目下的超链接可不写ip地址 如要访问项目thinkphp下的UserAction中的delete函数,可写为
但是为了防止因项目名称(thinkphp)的更改,导致系统不能使用,可使用”__URL__”替换”/thinkphp/index.php/User/”,如以上地址改写为
9. 将两个字符串合并
$m->where(\也可以是单引号
10. ThinkPHP 3 的输出
? ?
通过 echo 等PHP原生的输出方式在页面中输出 通过display方法输出,如
想分配变量可以使用assign方法,如在Action中
// 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { public function index(){
$this->assign('name','yinliang'); //给变量name分配值yinliang $this->display(); //输出Home\\Tpl\\Index\\index.html }
public function show(){ echo \ } } ?>
在Home\\Tpl\\Index\\index.html中要访问name变量可以在文件中添加{$name}(修改了左右定界符的则把{,}分别修改为修改后的左右定界符) 修改左右定界符(为了防止{$data }与Jquery语法混淆) 休要修改配置文件(Conf/config.php)中的配置项 'TMPL_L_DELIM'=>'<{', //修改左定界符 TMPL_R_DELIM'=>'}>', //修改右定界符
?
11. ThinkPHP 3 的模型使用 (与数据库链接,操作数据库)
?
配置数据库(在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方式为优先 在Action的index函数中获取值 public function index(){ $m=new Model(User);//记住U大写
$arr=$m->select();//user表中的所有数据都被放到数组$arr中
$this->assign('name',$arr[1]['username']);//将name赋值为数组$arr中下标为
//1的元素的username的值
$this->display();
}
还有一种简单实用模型的方式
M() 等效为 new Model(); $m=M('User'); $arr=$m->select();
使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行 增删改查 CURD
增 -C Create $m->add() 删 -D Delete $m->delete() 改 -U Update $m->save() 查 -R Read $m->select() 模板可以遍历数组 html页面中
在Action中的index中给array赋值 public function index(){
$m=new Model(User); $arr=$m->select();
$this->assign('array',$arr);
$this->assign('name',$arr[1]['username']); $this->display();
}
12. ThinkPHP 3.1.2 CURD特性
?
ThinkPHP 3 读取数据 对数据的读取 Read $m=new Model('User'); $m=M('User');
?
?
select
$m->select();//获取所有数据,以数组形式返回 find
$m->find($id);//获取单条数据
getField(字段名)//获取一个具体的字段值 $arr=$m->where('id=2')->getField('username'); ThinkPHP 3 创建数据 对数据的添加 Create $m=new Model('User'); $m=M('User'); $m->字段名=值 $m->add();
返回值是新增的id号
代码示例:
public function add(){ $m=new Model('User'); $m->username=$_POST['username']; $m->sex=$_POST['sex']; $newId=$m->add(); if($newId>0){ $this->success(\ }else{ $this->error(\ } }
ThinkPHP 3 删除数据 $m=M('User');
$m->delete(2); //删除id为2的数据
$m->where('id=2')->delete(); //与上面效果相同,也是删除id为2的数据 返回值是受影响行数
代码示例:
public function delete(){ $id=$_GET['id']; $m=new Model('User'); var_dump($id); // $m->delete(11); $count=$m->where('id='.$_GET['id'])->delete(); if($count>0){ $this->success(\ // $this->success(\数据删除成功!!!\ }else{
?
$this->error(\ // $this->error(\数据删除失败!!!\ } }
ThinkPHP 3 更新数据 $m=M('User'); $data['id']=1;
$data['username']='ztz2';
$m->save($data); 返回值是受影响行数
代码示例:
public function update(){ $m=new Model('User'); $data['id']=$_POST['id']; $data['username']=$_POST['username']; $data['sex']=$_POST['sex']; $count=$m->save($data); if($count>0){ $this->success(\ }else{ $this->error(\ } }
13. ThinkPHP 3.1.2 查询方式
find只能查询一天记录,select可以查询多条记录 ? 普通查询方式
? 字符串
$arr=$m->where(\
? 数组
$data['sex']=0; $data['username']='gege'; $arr=$m->where($data)->find(); 注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值 $data['sex']=0; $data['username']='gege'; $data['_logic']='or';
? 表达式查询方式
$data['id']=array('lt',6); $arr=$m->where($data)->select(); EQ 等于 NEQ不等于
GT 大于 EGT大于等于 LT 小于 ELT小于等于
示例代码:
public function show(){ $m=new Model('User'); $data['id']=array(\ $arr=$m->where($data)->select(); var_dump($arr); $this->display(); }
? LIKE 模糊查询 $data['username']=array('like','%ge');//查询username以ge结尾的user
$data['username']=array('like','%ge%');//查询username包含ge的user $arr=$m->where($data)->select(); ? 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(); ? BETWEEN
$data['id']=array('between',array(5,7)); $arr=$m->where($data)->select(); //SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) ) $data['id']=array('not between',array(5,7));//注意,not 和 between中间一定要有空格 $arr=$m->where($data)->select();
? 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']=array('not in',array(4,6,7)); $arr=$m->where($data)->select(); //SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) ) ? 区间查询
$data['id']=array(array('gt',4),array('lt',10));//默认关系是 and 的关系
//SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) ) $data['id']=array(array('gt',4),array('lt',10),'or') //关系就是or的关系 $data['username']=array(array('like','%2%'),array('like','%五%'),'gege','or'); ? 统计查询
? count //获取个数
$data['username']=array(array(\KE\
echo $m->where($data)->count(); ? max //获取最大数
echo $m->max(\? min //获取最小数
echo $m->min(\? avg //获取平均数
echo $m->avg(\? sum //获取总和
echo $m->sum(\
? SQL直接查询
? query 主要数处理读取数据的
` 成功返回数据的结果集 失败返回boolean false $m=M(); $result=$m->query(\ from tp_user where id >50\ var_dump($result); ? execute 用于更新个写入操作
成功返回影响行数
失败返回boolean false $m=M(); $result=$m->execute(\ var_dump($result);
14. ThinkPHP 3.1.2 连贯操作
? PHP中类的构造方法
所有类的构造方法都如下,只是参数可以不一样 function __construct($tableName){ }
? 字符串操作函数
? AddSlashes: 字符串加入斜线。 ? bin2hex: 二进位转成十六进位。 ? Chop: 去除连续空白。 ? Chr: 返回序数值的字符。 ? chunk_split: 将字符串分成小段。 ? convert_cyr_string: 转换古斯拉夫字符串成其它字符串。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? crypt: 将字符串用 DES 编码加密。 echo: 输出字符串。 explode: 切开字符串。 flush: 清出输出缓冲区。
get_meta_tags: 抽出文件所有 meta 标记的资料。 htmlspecialchars: 将特殊字符转成 HTML 格式。 htmlentities: 将所有的字符都转成 HTML 字符串。 implode: 将数组变成字符串。 join: 将数组变成字符串。 ltrim: 去除连续空白。
md5: 计算字符串的 MD5 哈稀。 nl2br: 将换行字符转成
。 Ord: 返回字符的序数值。
parse_str: 解析 query 字符串成变量。 print: 输出字符串。
printf: 输出格式化字符串。
quoted_printable_decode: 将 qp 编码字符串转成 8 位字符串。 QuoteMeta: 加入引用符号。
rawurldecode: 从 URL 专用格式字符串还原成普通字符串。 rawurlencode: 将字符串编码成 URL 专用格式。 setlocale: 配置地域化信息。
similar_text: 计算字符串相似度。 soundex: 计算字符串的读音值 sprintf: 将字符串格式化。
strchr: 寻找第一个出现的字符。 strcmp: 字符串比较。
strcspn: 不同字符串的长度。
strip_tags: 去掉 HTML 及 PHP 的标记。 StripSlashes: 去掉反斜线字符。 strlen: 取得字符串长度。
strrpos: 寻找字符串中某字符最后出现处。 strpos: 寻找字符串中某字符最先出现处。 strrchr: 取得某字符最后出现处起的字符串。 strrev: 颠倒字符串。
strspn: 找出某字符串落在另一字符串遮罩的数目。 strstr: 返回字符串中某字符串开始处至结束的字符串。 strtok: 切开字符串。
strtolower: 字符串全转为小写。 strtoupper: 字符串全转为大写。 str_replace: 字符串取代。 strtr: 转换某些字符。 substr: 取部份字符串。
trim: 截去字符串首尾的空格。
ucfirst: 将字符串第一个字符改大写。
? ucwords: 将字符串每个字第一个字母改大写。 ? 常用连贯操作
? where
帮助我们设置查询条件 ? order
对结果进行排序(desc降序排列,asc升序排列) $arr=$m->order('id desc')->select();
$arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select(); $arr=$m->where($data)->order(\? limit
限制结果
limit(2,5) //从第二条开始取出5条
limit('2,5') //从第二条开始取出5条 limit(10)//limit(0,10) ? field
设置查询字段
field('username as name,id')//获取username,id字段,并且将username字段重命名为name
field(array('username'=>'name','id')//同上 field('id',true) //获取除了id以外的所有字段
$arr=$m->where($data)->order(https://www.bwwdw.com/plus/\
asc\只获取username字段 $arr=$m->where($data)->order(https://www.bwwdw.com/plus/\
asc\只获取username,id字段 ? table ? group ? having ? 补充连贯操作
? alias 用于给当前数据表定义别名 字符串 ? page 用于查询分页(内部会转换成limit) 字符串和数字 ? join* 用于对查询的join支持 字符串和数组 ? union* 用于对查询的union支持 字符串、数组和对象 ? distinct 用于查询的distinct支持 布尔值 ? lock 用于数据库的锁机制 布尔值 ? cache 用于查询缓存 支持多个参数(以后在缓存部分再详细描述) ? relation 用于关联查询(需要关联模型扩展支持) 字符串 ? validate 用于数据自动验证 数组 ? auto 用于数据自动完成 数组 ? filter 用于数据过滤 字符串 ? scope* 用于命名范围 字符串、数组
15. ThinkPHP 3.1.2 视图
? 模板的使用
规则
模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)
更换模板文件的后缀名(修改配置文件Conf/config.php) 'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名 ? 修改模板文件目录层次(修改配置文件Conf/config.php)
'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次 ? 模板主题
'DEFAULT_THEME'=>'your',//设置默认模板主题
需要在TPL下面新建一个your文件夹作为模板主题文件夹
如何动态修改模板主题?
? 在后台准备一个功能,修改config.php文件中的默认模板项 ? 通过url传递 t=主题 参数可以修改不同的模板
修改配置文件Conf/config.php,添加如下项 'DEFAULT_THEME'=>'your',//设置默认模板主题 'TMPL_DETECT_THEME'=>true,//自动侦测模板主题 'THEME_LIST'=>'your,my',//支持的模板主题列表 如要访问my主题则url后加上?t=my,如
http://localhost/thinkphp/index.php/User/index?t=my
? 输出模板内容
? display
? display中没有参数 $this->display();
? 可以带参数
$this->display(本模块文件夹下的其他模板文件); $this->display('index2'); $this->display(其他文件夹下的模板文件); $this->display('Public:error');//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块 $this->display(其他主题下的 文件夹下的 模板文件);//需要开启主题支持 $this->display('my:Index:index'); $this->display(一个url路径); $this->display('./Public/error.html');//访问的是thinkphp\\Public\\error.html $this->display('./Public/error.html','utf-8','text/xml');
?
$this->show($content);
? fetch方法
获得模板文件中的内容,以字符串形式返回 $content=$this->fetch('Public:error'); ? show方法
不需要模板文件,可以直接输出模板内容 $content=$this->fetch('Public:error'); dump($content); $content=str_replace('h1','i',$content); $this->show($content);
? 模板中的赋值
//$this->assign('name','赵桐正'); $this->name='赵桐正2'; $this->display(); ? 模板替换
__PUBLIC__:会被替换成当前网站的公共目录 通常是 (项目目录/Public/),如thinkphp/Public/,可以用来调用外部的js,css等文件
__ROOT__: 会替换成当前网站的地址(不含域名) __APP__: 会替换成当前项目的URL地址 (不含域名) __GROUP__:会替换成当前分组的URL地址 (不含域名) __URL__: 会替换成当前模块的URL地址(不含域名) __ACTION__:会替换成当前操作的URL地址 (不含域名) __SELF__: 会替换成当前的页面URL
? 更换模板变量规则,修改配置项
'TMPL_PARSE_STRING'=>array( //添加自己的模板变量规则 '__CSS__'=>__ROOT__.'/Public/Css', '__JS__'=>__ROOT__.'/Public/Js', ),
16. ThinkPHP自带的验证码相关操作
(详见ThinkPHP3.1.2完全开发手册CHM[2013-01-15].chm/19.杂项/19.8验证码)
? 将thinkphp的扩展包解压缩 将Extend文件夹中所有项拷贝到
thinkphp\\Public\\ThinkPHP\\ Extend中
? 在\\Home\\Lib\\Action中新建PublicAction.class.php并打开填写代码如下
class PublicAction extends Action { Public function verify(){ import('ORG.Util.Image'); Image::buildImageVerify(); }
} ?
buildImageVerify($length,$mode,$type,$width,$height,$verifyName) 的用法
length 验证码的长度,默认为4位数 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数model 字 2 大写字母 3 小写字母 4中文 5混合 type 验证码的图片类型,默认为png width 验证码的宽度,默认会自动根据验证码长度自动计算 height 验证码的高度,默认为22 verifyName 验证码的SESSION记录名称,默认为verify
? 通过
onClick=\加载图片 . 加上
onClick=\的目的是当点击生成的图片时,图片自动更改后面的+'?'+Math.random()是为了让浏览器认为加载的是不同的图片,从而不从缓存中直接读取图片,已达到更换图片的效果. ? 后台中验证码验证
if($_SESSION['verify'] != md5($_POST['verify'])) { $this->error('验证码错误!');
}
17. ThinkPHP 3.1.2中自定义类的创建与加载
? 在\\Public\\ThinkPHP\\Extend\\Library\\ORG\\My中新建Test.class.php文件,内容如下
public $name='yinliang'; } ?>
? 任何函数想引用Test类,要在函数中添加import('ORG.My.Test');,如
public function index(){ import('ORG.My.Test'); $obj=new Test; echo $obj->name; }
18. ThinkPHP 3.1.2 模板中的变量
? 变量输出
? 标量输出 ? 数组输出 {$name[1]} {$name['k2']} {$name.k1}
对象输出
{$name:k} {$name->k} ? 系统变量 ?
用法 含义 例子 $Think.server 获取{$Think.server.php_self} $_SERVER $Think.get 获取$_GET {$Think.get.id} $Think.post 获取$_POST {$Think.post.name} $Think.request 获取{$Think.request.user_id} $_REQUEST $Think.cookie 获取{$Think.cookie.username} $_COOKIE $Think.session 获取{$Think.session.user_id} $_SESSION $Think.config 获取系统配{$Think.config.app_status} 置参数 $Think.lang 获取系统语{$Think.lang.user_type} 言变量 $Think.const 获取系统常{$Think.const.app_name}量 {$Think.APP_NAME} $Think.env 获取环境变{$Think.env.HOSTNAME} 量 $Think.version 获取框架版{$Think.version} 本号 $Think.now 获取当前时{$Think.now} 间 $Think.template 获取当前模{$Think.template} 板 $Think.ldelim 获取模板左{$Think.ldelim} 界定符 $Think.rdelim 获取模板右{$Think.rdelim} 界定符 或? 默认值 {$name|default='这里是默认值'}
? 使用函数
{$name|strtoupper} 生成的编译后文件是 Action函数中{$name|date='Y m d H:i:s',###}// ###代表$name
? 运算符
+ - * / % ++ -- {$name++}
19. ThinkPHP 3.1.2 模板中的语法知识
? 导入CSS和JS文件
? 传统的html方式
? import
//方法可以自动检测导入的文件类型
? 分支结构
? if
两个对象关系对照表 > < == <= >= != === !==
gt lt eq elt egt neq heq nheq
? 循环结构
? for
用法
举例:
要输出的数据模板变量 循环变量 要输出数据的offset 输出数据的长度 循环的key变量,默认值为i 对key值取模,默认为2 如果数据为空显示的字符串 ?
id姓名性别
{$v.id}
{$v.username}
<比较标签 name=\变量\值\内容比较标签> eq或者 equal 等于 如 ? 范围标签 ? in/notin 标签来判断模板变量是否已经赋值, ? empty/notempty empty标签判断模板变量是否为空, ? defined / notdefined 判断常量是否已经定义 ? define 在模板中定义常量 模板中变量赋值 ? 其他标签使用 ? 在模板中直接使用PHP代码 20. ThinkPHP 3.1.2中的乱码处理 要保证php文件与html文件的编码是相同的,(假设都是utf-8)如 IndexAction.class.php传中文字符给index.html,则在html的 21. ThinkPHP 3.1.2 模板的使用技巧 ? 模板包含 ? (务必记住此知识点)下面的例子我们在包含header模板的时候传入了title,keywords,css和js变量: 就可以在包含的header.html文件里面使用var1和var2变量,方法 [title] ? 模板渲染(详见ThinkPHP3.1.2完全开发手册CHM[2013-01-15].chm/8.模板引擎 /8.24模板布局) ? 自动开启模板渲染 设置配置文件 'LAYOUT_ON'=>true,//开启模板渲染 准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容 如果在摸一个具体模板中不希望使用渲染模板,可以在页首添加{__NOCONTENT__} ? 不开启自动模板渲染可以在每一个具体页面的页首添加 这里是渲染页面!!!