1、Thinkphp 1. 配置gvim Ø 打开安装目录下的_vimrc文件,添加 ² set nu! 显示行数 ² colorscheme darkblue 背景颜色设置为深蓝色 Ø gvim配置不自动生成备份文件 默认情况下用gVim编辑文件时,会自动生成带~的备份文件。如果不想在编辑文件时自动生成备份文件的话,可以这么做:打开gVim安装目录下的vimrc_example.vim,将其中的如下部分中的else语句用引号注释掉: if has("vms") set nobackup " do not keep a backup file, use versions in
2、stead else set backup " keep a backup file 即将上面四句改为: if has("vms") set nobackup " do not keep a backup file, use versions instead " else " set backup " keep a backup file 里,else部分用双引号注释掉即可。set backup是设置使用自动生成备份文件的命令。 Ø windows上gvim的编码设置 Windows系统默认的编码是cp936,所以用gvim一打开文件,默认是用gb
3、2312编码打开的。这导致很多时候打开的文件是乱码,不能正常显示,那要怎么解决这个问题呢?很简单,看下面的设定: 打开gvim,到菜单栏找到“编辑”,在下拉菜单找到“启动设定” 点击 “启动设定” 进去,你会看到相应的配置文件 在文件的末尾加入如下设定: set encoding=utf-8 set fileencodings=utf-8,chinese,latin-1 if has("win32") set fileencoding=chinese else set fileencoding=utf-8 endif source $VIMR
4、UNTIME/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', //设
5、置数据库类型 '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 'TMP
6、L_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,/
7、/开启模板渲染 'URL_CASE_INSENSITIVE'=>true,//url不区分大小写 'URL_HTML_SUFFIX'=>'html|shtml|xml',//限制伪静态的后缀 'APP_GROUP_LIST' => 'Home,Admin', //项目分组设定 'DEFAULT_GROUP' => 'Home', //默认分组 3. 项目配置(__ROOT__\index.php)
8、/Home/'); //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 模式 -- 重点!!!
9、 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 "fasdfasdfsd"; dump($_POST['username']); } 注:如果表单中的method="get",则上述函数中的$_POST要改为$_GET 8. 超链接地址的写法 同项目下的超链接可不写ip地址 如要访问项目thinkphp下的UserAction中的delete函数,可写为 delete 但是为了防止因项目名称(thinkphp)的更改,导致系统不能使用,可使用”__URL__”替换”/thinkphp/index.php/User/”,如以上地址改写为 delete 9. 将两个字符串合并 $m->where("id=".$_GET['id'])->delete();//也可以是单引号 10. ThinkPHP 3 的输出 Ø 通过 echo 等PHP原生的输出方式在页面中输出 Ø 通过di13、splay方法输出,如 想分配变量可以使用assign方法,如在Action中 assign('name','yinliang'); //给变量name分配值yinliang $this->display(); //输出Home\Tpl\Index\index.html } public function show(){ echo "show:
14、 hello world!!!"; } } ?> 在Home\Tpl\Index\index.html中要访问name变量可以在文件中添加{$name}(修改了左右定界符的则把{,}分别修改为修改后的左右定界符) Ø 修改左右定界符(为了防止{$data }与Jquery语法混淆) 休要修改配置文件(Conf/config.php)中的配置项 'TMPL_L_DELIM'=>'<{', //修改左定界符 TMPL_R_DELIM'=>'}>', //修改右定界符 11. ThinkPHP 3 的模型使用 (与数据库链接,操作数据库) Ø 配置数据库(在Conf/c
15、onfig.php中配置数据库相关信息) 'DB_TYPE'=>'mysql', //设置数据库类型 'DB_HOST'=>'localhost',//设置主机 'DB_NAME'=>'thinkphp',//设置数据库名 'DB_USER'=>'root', //设置用户名 'DB_PWD'=>'', //设置密码 'DB_PORT'=>'3306', //设置端口号 'DB_PREFIX'=>'tp_', //设置表前缀加表前缀是为了更好的区分表,比如 cw_代表财务 cg_代表采购,如果没有表前缀,则将tp_
16、去掉即可 也可以使用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赋值为数组$a
17、rr中下标为//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页面中
18、
19、splay(); } 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
20、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("Add new user successfully!!!",index); }els
21、e{ $this->error("Add new user failed!!!",index); } } Ø 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_du
22、mp($id); // $m->delete(11); $count=$m->where('id='.$_GET['id'])->delete(); if($count>0){ $this->success("Data have been delete successfully!!!"); // $this->success("数据删除成功!!!"); }else{ $this->error("The operation of deleting data exit error!!!"); // $this->error("数
23、据删除失败!!!"); } } Ø 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
24、['sex']; $count=$m->save($data); if($count>0){ $this->success("Data have been modify successfully!!!",index); }else{ $this->error("The operation of modifing data exit error!!!",index); } } 13. ThinkPHP 3.1.2 查询方式 find只能查询一天记录,select可以查询多条记录 Ø 普通查询方式 ² 字符串 $arr=$m->where(
25、"sex=0 and username='gege'")->find(); ² 数组 $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($da
26、ta)->select(); EQ 等于 NEQ不等于 GT 大于 EGT大于等于 LT 小于 ELT小于等于 示例代码: public function show(){ $m=new Model('User'); $data['id']=array("LT",25); $arr=$m->where($data)->select(); var_dump($arr); $this->display(); } ² LIKE 模糊查询 $data['username']=array('like','%ge'
27、);//查询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('l
28、ike',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));
29、//注意,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(); //SELE
30、CT * 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
31、','%2%'),array('like','%五%'),'gege','or'); Ø 统计查询 ² count //获取个数 $data['username']=array(array("LIKE","%s%"),array("LIKE","%d%"),array("LIKE","%g%"),"or"); echo $m->where($data)->count(); ² max //获取最大数 echo $m->max("id"); ² min //获取最小数 echo $m->min("id"); ² avg //获取平均数 echo $m->avg("
32、id"); ² sum //获取总和 echo $m->sum("id"); Ø SQL直接查询 ² query 主要数处理读取数据的 ` 成功返回数据的结果集 失败返回boolean false $m=M(); $result=$m->query("select * from tp_user where id >50"); var_dump($result); ² execute 用于更新个写入操作 成功返回影响行数 失败返回boolean false $m=M(); $result=$m->execute("insert int
33、o tp_user(`username`) values('ztz3')"); var_dump($result); 14. ThinkPHP 3.1.2 连贯操作 Ø PHP中类的构造方法 所有类的构造方法都如下,只是参数可以不一样 function __construct($tableName){ } Ø 字符串操作函数 ² AddSlashes: 字符串加入斜线。 ² bin2hex: 二进位转成十六进位。 ² Chop: 去除连续空白。 ² Chr: 返回序数值的字符。 ² chunk_split: 将字符串分成小段。 ² convert_cyr
34、string: 转换古斯拉夫字符串成其它字符串。 ² crypt: 将字符串用 DES 编码加密。 ² echo: 输出字符串。 ² explode: 切开字符串。 ² flush: 清出输出缓冲区。 ² get_meta_tags: 抽出文件所有 meta 标记的资料。 ² htmlspecialchars: 将特殊字符转成 HTML 格式。 ² htmlentities: 将所有的字符都转成 HTML 字符串。 ² implode: 将数组变成字符串。 ² join: 将数组变成字符串。 ² ltrim: 去除连续空白。 ² md5: 计算字符
35、串的 MD5 哈稀。
² nl2br: 将换行字符转成
。
² Ord: 返回字符的序数值。
² parse_str: 解析 query 字符串成变量。
² print: 输出字符串。
² printf: 输出格式化字符串。
² quoted_printable_decode: 将 qp 编码字符串转成 8 位字符串。
² QuoteMeta: 加入引用符号。
² rawurldecode: 从 URL 专用格式字符串还原成普通字符串。
² rawurlencode: 将字符串编码成 URL 专用格式。
² setlocale: 配置地域化信息。
36、 ² similar_text: 计算字符串相似度。 ² soundex: 计算字符串的读音值 ² sprintf: 将字符串格式化。 ² strchr: 寻找第一个出现的字符。 ² strcmp: 字符串比较。 ² strcspn: 不同字符串的长度。 ² strip_tags: 去掉 HTML 及 PHP 的标记。 ² StripSlashes: 去掉反斜线字符。 ² strlen: 取得字符串长度。 ² strrpos: 寻找字符串中某字符最后出现处。 ² strpos: 寻找字符串中某字符最先出现处。 ² strrchr: 取得某字符最后
37、出现处起的字符串。 ² strrev: 颠倒字符串。 ² strspn: 找出某字符串落在另一字符串遮罩的数目。 ² strstr: 返回字符串中某字符串开始处至结束的字符串。 ² strtok: 切开字符串。 ² strtolower: 字符串全转为小写。 ² strtoupper: 字符串全转为大写。 ² str_replace: 字符串取代。 ² strtr: 转换某些字符。 ² substr: 取部份字符串。 ² trim: 截去字符串首尾的空格。 ² ucfirst: 将字符串第一个字符改大写。 ² ucwords: 将字符串每个字第一
38、个字母改大写。 Ø 常用连贯操作 ² where 帮助我们设置查询条件 ² order 对结果进行排序(desc降序排列,asc升序排列) $arr=$m->order('id desc')->select(); $arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select(); $arr=$m->where($data)->order("id asc")->select(); ² limit 限制结果 limit(2,5) //从第二条开始取出5条 limit('2,5') //从第二条开始取出5条
39、 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("id asc")->limit(2,3)->field("username")->select();//只获取username字段 $arr=$m->wher
40、e($data)->order("id asc")->limit(2,3)->field("username,id")->select();//只获取username,id字段 ² table ² group ² having Ø 补充连贯操作 ² alias 用于给当前数据表定义别名 字符串 ² page 用于查询分页(内部会转换成limit) 字符串和数字 ² join* 用于对查询的join支持 字符串和数组 ² union* 用于对查询的union支持 字符串、数组和对象 ² distinct 用于查询的distinct支持 布尔值 ² lock 用于
41、数据库的锁机制 布尔值 ² cache 用于查询缓存 支持多个参数(以后在缓存部分再详细描述) ² relation 用于关联查询(需要关联模型扩展支持) 字符串 ² validate 用于数据自动验证 数组 ² auto 用于数据自动完成 数组 ² filter 用于数据过滤 字符串 ² scope* 用于命名范围 字符串、数组 15. ThinkPHP 3.1.2 视图 Ø 模板的使用 ² 规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl) 更换模
42、板文件的后缀名(修改配置文件Conf/config.php) 'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名 ² 修改模板文件目录层次(修改配置文件Conf/config.php) 'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次 ² 模板主题 'DEFAULT_THEME'=>'your',//设置默认模板主题 需要在TPL下面新建一个your文件夹作为模板主题文件夹 如何动态修改模板主题? l 在后台准备一个功能,修改config.php文件中的默认模板项 l 通过url传递 t=主题 参数可以修改不同的模板
43、 修改配置文件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 l display中没有参数 $this->display(); l 可以带参数
44、 $this->display(本模块文件夹下的其他模板文件); $this->display('index2'); $this->display(其他文件夹下的模板文件); $this->display('Public:error');//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块 $this->display(其他主题下的 文件夹下的 模板文件);//需要开启主题支持 $this->display('my:Index:index'); $this->displ
45、ay(一个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方法 不需要模板文件,可以直接输出模板内容 $c
46、ontent=$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/,可以用来调用外部
47、的js,css等文件 __ROOT__: 会替换成当前网站的地址(不含域名) __APP__: 会替换成当前项目的URL地址 (不含域名) __GROUP__:会替换成当前分组的URL地址 (不含域名) __URL__: 会替换成当前模块的URL地址(不含域名) __ACTION__:会替换成当前操作的URL地址 (不含域名) __SELF__: 会替换成当前的页面URL Ø 更换模板变量规则,修改配置项 'TMPL_PARSE_STRING'=>array( //添加自己的模板变量规则 '__CSS__'=>__ROOT__.'/Pub
48、lic/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并打开填写代码如下
49、ds Action { Public function verify(){ import('ORG.Util.Image'); Image::buildImageVerify(); } } ² buildImageVerify($length,$mode,$type,$width,$height,$verifyName) 的用法 length 验证码的长度,默认为4位数 model 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合 type 验证码的图片类型,默认为png width 验
50、证码的宽度,默认会自动根据验证码长度自动计算
height
验证码的高度,默认为22
verifyName
验证码的SESSION记录名称,默认为verify
Ø 通过加载图片 . 加上onClick="this.src=this.src+'?'+Math.random()"的目的是当点击生成的图片时,图片自动更改后面的+'?'+Math.random()是为了让浏览器认为加载的是不同的图片,从而不从缓存中直接读取图片,已达






