已3.2版本为例子
---------------------------------------------------------------------------------------------------------------------------------------------------------
网站目录 d:/www
复制ThinkPHP完整包到d:/www下
index.php 配置如下
define('THINK_PATH','./ThinkPHP/'); //核心位置
define('APP_NAME','hello'); //项目名字
define('APP_PATH', './home/'); //项目位置
define('APP_DEBUG', 'true'); //开启调试
require THINK_PATH.'ThinkPHP.php'; //载入核心文件
复制\ThinkPHP\Conf\convention.php 配置信息到\home\Conf\config.php
/* URL设置 */
'URL_CASE_INSENSITIVE' => true, // 默认false 表示URL区分大小写 true则表示不区分大小写
'URL_MODEL' => 1, // (PATHINFO 模式)
详细配置 http://hi.baidu.com/code__/item/4b0da60035889494a2df4312
调试错误 可以加入
ThinkPHP\Conf\debug.php
SHOW_PAGE_TRACE 显示页面Trace信息
SHOW_RUN_TIME 是否显示运行时间 false
SHOW_ADV_TIME 是否显示详细的运行时间 false
SHOW_DB_TIMES 是否显示数据库查询和写入次数 false
SHOW_CACHE_TIMES 是否显示缓存操作次数 false
SHOW_USE_MEM 是否显示内存开销 false
SHOW_LOAD_FILE 是否显示加载文件数 false
SHOW_FUN_TIMES 是否显示函数调用次数 false
EmptyAction.class.php //空模块定义
前置方法和后置方法 _before_和_after_
空方法 _empty
<?php
class EmptyAction extends Action {
public function index(){
$this->show('404');
}
public function_empty(){ //空方法定义
$this->show('404');
}
}
?>
模板
--------------------------------------------------------------------------------------------------------------
直接输出变量
$name = 'ThinkPHP';
$this->assign('name',$name);
$this->display();
模板 Hello,{$name}!
系统变量输出 {$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
常量输出 {$Think.const.MODULE_NAME}
调用函数 {:md5('aaa')}
默认值 {$name|default="名称为空"}
模板的位置 和调用 home\view\模块\方法.html
程序里的调用
$this->display(); //当前方法
$this->display("list"); //当前模块下的list.html
$this->display("news:list"); //news模块下的list.html
$this->display("./home/tpl/aaa/www.html");//绝对目录的模板调用
$this->display("news:list","utf8","text/html"); //输入其他编码或者格式
模板赋值 $this->name="哈哈"; $this->assign("name",array("abc"=>"123","ab"=>"呵呵")); 支持数组
模版页{$name} 数组形式{$name.abc} {$name['abc']}
循环数组
<volist name="list" id="data">
{$data.id}:{$data.name}<br/>
</volist>
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前应用的URL地址 (不含域名)
__MODULE__:会替换成当前模块的URL地址 (不含域名)
__CONTROLLER__(__或者__URL__ 兼容考虑): 会替换成当前控制器的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
模板的布局
1 <include file="./home/view/模块/方法.html" /> //绝对目录的模板调用
2 <include file="list" /> //当前模块下的list
3 <include file="news/list" /> // news模块下的list.html
4 <include file="$tt" /> //变量动态调用
5 <include file="list,content" /> //组合调用
6 layout布局 模板<layout name="tp" />我是SSS 会调用\home\Tpl\tp.html
head<br> // <include file="list" /> 也可以正常使用include
{__CONTENT__} 这里是你的内容
<br>foot
----------------------------------------------------------------------------------------------------------------------------
CRUD数据操作
查询多条
$news=M("News");
$list=$news->where("id>1")->order("id desc")->select();
print_r($list);
查询一条 $list=$news->find($id);
删除
$news=M("News");
if ($news->where("id=$_GET[id]")->delete())
{ $this->success("删除OK",'__APP__/index/www',5); }
else
{ $this->error("删除NO",'__APP__/index/www',5); }
增加
$news=M("News");
if(IS_POST){
$date['title']=$_POST['title'];
$date['content']=$_POST['content'];
$date['asdasdasd']=$_POST['content']; //不存在的字段不会写入
if ($news->add($date))
{ $this->success("添加OK",'__APP__/index/www',5); }
else
{ $this->error("添加NO",'__APP__/index/www',5); }
}
$this->display();
修改
$news=M("News");
if(IS_POST){
$date['title']=$_POST['title'];
$date['content']=$_POST['content'];
$date['id']=$_POST['id'];
if ($news->save($date))
{ $this->success("修改OK",'__APP__/index/www',5); }
else
{ $this->error("修改NO",'__APP__/index/www',5); }
}
$id=$_GET[id];
$list=$news->find($id);
$this->assign("d",$list);
$this->display();
表单令牌
配置 或者 程序定义 C('TOKEN_ON',false);
'TOKEN_ON'=>true, // 是否开启令牌验证
'TOKEN_NAME'=>'__hash__', // 令牌验证的表单隐藏字段名称
'TOKEN_TYPE'=>'md5', //令牌哈希验证规则 默认为MD5
if (!$User->autoCheckToken($_POST)){
// 令牌验证错误
}
模型
字段映射 自动验证 自动完成
class NewsModel extends Model{
protected $_map = array(
'a1' =>'title', // 把表单中name映射到数据表的username字段
'a2' =>'content', // 把表单中的mail映射到数据表的email字段
);
protected $_validate = array(
array('title','require','标题必须填写!'), //默认情况下用正则进行验证
array('content','require','内容必须填写!'), //默认情况下用正则进行验证
);
protected $_auto = array (
array('tel','138000',2) , // 对tel字段在编辑的更改为138000
array('title','md5',3,'function') , // 对title字段在新增和编辑的时候使md5函数处理
array('date','time',1,'function') , // 对date字段在新增的时候使time函数处理
);
}
$news=D("News");
if(IS_POST){
if( $list=$news->create()){
if ($news->save())
{$this->success("修改OK",'__APP__/index/www',5);}
else
{$this->error("修改NO",'__APP__/index/www',5);}
}else{
$this->error($news->getError()); }
}
字段映射 调用时候 处理
$list=$news->find($id);
$data = $news->parseFieldsMap($list);
网页跳转模块中
$this->redirect("index/www");
公共部分调用
R方法
R("模块/方法");
A方法
A("模块")->方法1();
A("模块")->方法2();
\home\Common\common.php 存放公共函数
分页
--------------------------------------------------------------------------------------------------------------------
$User = M('User'); // 实例化User对象
// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数使用 $_GET[p]获取
$list = $User->where('status=1')->order('create_time')->page($_GET['p'].',25')->select();
$this->assign('list',$list);// 赋值数据集
$count = $User->where('status=1')->count();// 查询满足要求的总记录数
$Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板
多表查询
$list=$news->table('ms_news n,ms_class as p')->where("1")->order("n.id desc")->field('n.*,p.*')->select();
跨库查询
$Model->table('db_name.think_user')->where('status>1')->select();
切换表查询
$Model->table('think_user')->where('status>1')->select();
多语言
\home\Conf\tags.php 加入 'app_begin' => array('CheckLang')
'LANG_SWITCH_ON' => true, // 默认关闭多语言包功能
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效
'LANG_LIST' => 'zh-cn,en-us', // 允许切换的语言列表 用逗号分隔
'VAR_LANGUAGE' => 'l', // 默认语言切换变量
建立\home\Lang\zh-cn\common.php
<? return array(
'abc'=>'欢迎使用ThinkPHP',
);?>
模版直接使用 {$Think.lang.abc} 程序里取值 L("abc")
程序里定义 L('define2','语言'); $value = L('define2');
缓存
F("DATA","值"); 设置
F("DATA",null); 清空
$abc=F("DATA"); 取值
F("user/data","asd"); 写入到\home\Runtime\Data\user\data.php
S 和F一样 带有时间 F("DATA","值",3600); 设置 秒
静态缓存
'HTML_CACHE_ON'=>TRUE , //打开静态缓存
'HTML_PATH' =>'__APP__/html', //设置已经生成的静态页保存路径
'HTML_CACHE_TIME'=>'60', //设置默认缓存有效时间
'HTML_CACHE_RULES'=> array(
'Index' => array('{p}' ), //index模块
'Index/edit' => array('{id}' ), //index/方法 以id位名称
'*' => array('{$_SERVER.REQUEST_URI}'), //所有
)
安全取值
I('post.name','','htmlspecialchars'); // 采用htmlspecialchars方法对$_POST['name'] 进行过滤,如果不存在则返回空字符串
I('session.user_id',0); // 获取$_SESSION['user_id'] 如果不存在则默认为0
I('cookie.'); // 获取整个 $_COOKIE 数组
I('server.REQUEST_METHOD'); // 获取 $_SERVER['REQUEST_METHOD']
------------------------------------------------------------------------------------------------------------------------------------------
SESSION
session('name','value'); //设置session
$value = session('name'); //取值session
$value = session(); // 获取所有的session 3.2.2版本新增
session('name',null); // 删除name
session(null); // 清空当前的session
COOKIE
cookie('name','value'); //设置cookie
cookie('name','value',3600); // 指定cookie保存时间
cookie('name',array('value1','value2')); 保存数组
$value = cookie('name');
$value = cookie(); //获取全部cookie
cookie('name',null); //删除某个
cookie(null); // 清空所有cookie值
-----------------------------------------------------------------------------------------------------------------------------------------
验证码
Public function verify(){
import('ORG.Util.Image');
Image::buildImageVerify();
}
默认名字是 verify
// buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify'
if($_SESSION['verify'] != md5($_POST['yzm'])) { //默认session是md5加密的
$this->error('验证码错误!');
}
U 函数输出路径
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate',array('cate_id'=>1,'status'=>1))
模板里输入 {:}
路由功能
'URL_ROUTER_ON' => true, //开启路由
'URL_ROUTE_RULES' => array( //定义路由规则
'Edit/:id\d'=>'Index/Edit', // edit/1 = index/edit/id/1
'Www/:p\d'=>'Index/Www', // www/1 = index/www/p/1 必须大写第一字母
),
公共类库
Think目录:系统核心类库
Org目录:第三方公共类库
这些目录下面的类库都可以自动加载,你只要把相应的类库放入目录中,然后添加或者修改命名空间定义。 你可以在Org/Util/目录下面添加一个Image.class.php 文件,然后添加命名空间如下
namespace Org\Util;
class Image {
}
$image = new \Org\Util\Image;
-----------------------------------------------------------------------------------------------------
调试
只需要在入口文件中增加一行常量定义代码: define('APP_DEBUG', true); // 开启调试模式
在开启调试模式的状态下,系统会首先导入框架默认的调试模式配置文件,该文件位于系统目录的Conf\debug.php。
显示页面Trace信息
'SHOW_PAGE_TRACE' =>true,
-----------------------------------------------------------------------------------------------
变单上传
//系统设置
public function xtsz(){
if(IS_POST){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->rootPath='./'; //文件上传保存的根路径
$upload->savePath = '/Public/Uploads/';// 设置附件上传目录
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
if(!$upload->getError()=='没有文件被上传!'){
$this->error($upload->getError());
exit;
}
}else{// 上传成功
if($info['bjimg']["savename"]){$_POST['bjimg']=$info['bjimg']["savepath"].$info['bjimg']["savename"]; }
if($info['img']["savename"]){$_POST['img']=$info['img']["savepath"].$info['img']["savename"]; }
}
$db=M('system');
if($db->save($_POST)){
$this->success('设置成功!');
}else{
$this->error('设置失败!');
}
exit;
}
$db=M('system');
$this->rs=$db->where("id=1")->find();
$this->display();
}