资源描述
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 instead
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一打开文件,默认是用gb2312编码打开的。这导致很多时候打开的文件是乱码,不能正常显示,那要怎么解决这个问题呢?很简单,看下面的设定:
打开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 $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)
<?php
//1.确定应用名称 Home
define('APP_NAME','Home');
//2.确定应用路径
define('APP_PATH','./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 模式 -- 重点!!!!!!
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表单如下
<form method="post" action="__URL__/do_login">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
验证码:<input type="text" name="code"><img src="__APP__/Public/verify" onClick="this.src=this.src+'?'+Math.random()"><br>
<input type="submit" value="提交">
</form>
获取表单数据的Action对象函数如下
public function do_login(){
echo "fasdfasdfsd";
dump($_POST['username']);
}
注:如果表单中的method="get",则上述函数中的$_POST要改为$_GET
8. 超链接地址的写法
同项目下的超链接可不写ip地址 如要访问项目thinkphp下的UserAction中的delete函数,可写为
<a href="/thinkphp/index.php/User/delete?id=<{$vo.id}>">delete</a>
但是为了防止因项目名称(thinkphp)的更改,导致系统不能使用,可使用”__URL__”替换”/thinkphp/index.php/User/”,如以上地址改写为
<a href="__URL__/delete?id=<{$vo.id}>">delete</a>
9. 将两个字符串合并
$m->where("id=".$_GET['id'])->delete();//也可以是单引号
10. ThinkPHP 3 的输出
Ø 通过 echo 等PHP原生的输出方式在页面中输出
Ø 通过display方法输出,如
想分配变量可以使用assign方法,如在Action中
<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
public function index(){
$this->assign('name','yinliang'); //给变量name分配值yinliang
$this->display(); //输出Home\Tpl\Index\index.html
}
public function show(){
echo "show: hello world!!!";
}
}
?>
在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页面中
<volist name=’array’ id='vo'>
<{$vo.id}>----<{$vo.username}>-----<{$vo.sex}><br/>
</volist>
在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("Add new user successfully!!!",index);
}else{
$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_dump($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("数据删除失败!!!");
}
}
Ø 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("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("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($data)->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');//查询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("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("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 into 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_string: 转换古斯拉夫字符串成其它字符串。
² crypt: 将字符串用 DES 编码加密。
² echo: 输出字符串。
² explode: 切开字符串。
² flush: 清出输出缓冲区。
² get_meta_tags: 抽出文件所有 meta 标记的资料。
² htmlspecialchars: 将特殊字符转成 HTML 格式。
² htmlentities: 将所有的字符都转成 HTML 字符串。
² implode: 将数组变成字符串。
² join: 将数组变成字符串。
² ltrim: 去除连续空白。
² md5: 计算字符串的 MD5 哈稀。
² nl2br: 将换行字符转成 <br>。
² 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("id asc")->select();
² 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("id asc")->limit(2,3)->field("username")->select();//只获取username字段
$arr=$m->where($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 用于数据库的锁机制 布尔值
² 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文件夹作为模板主题文件夹
如何动态修改模板主题?
l 在后台准备一个功能,修改config.php文件中的默认模板项
l 通过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
l display中没有参数
$this->display();
l 可以带参数
$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并打开填写代码如下
<?php
class PublicAction extends 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
验证码的宽度,默认会自动根据验证码长度自动计算
height
验证码的高度,默认为22
verifyName
验证码的SESSION记录名称,默认为verify
Ø 通过<img src="__APP__/Public/verify" onClick="this.src=this.src+'?'+Math.random()">加载图片 . 加上onClick="this.src=this.src+'?'+Math.random()"的目的是当点击生成的图片时,图片自动更改后面的+'?'+Math.random()是为了让浏览器认为加载的是不同的图片,从而不从缓存中直接读取图片,已达
展开阅读全文