请求变量
use think\facade\Request; Request::param(\'name\'); Request::param();全部请求变量 返回数组 Request::param([\'name\', \'email\']); 多个变量 Request::param(\'a\',\'1\') $a不存在使用默认值1 Request::param(\'username\',\'\',\'strip_tags\'); 参数过滤 去掉html标签 htmlspecialchars转换成实体入库 strtolower小写 Request::header(); 请求头数组,支持单个 cookie input("name"); Request::session();获取 $_SESSION 变量 Request::cookie();获取 $_COOKIE 变量 Request::server();获取 $_SERVER 变量 Request::env();返回env数组 Request::file();获取 $_FILES 变量 Request::baseUrl(); /index/index Request::host(true); 域名:www.baidu.com,默认无参数包含端口:80 Request::url(1); 完整域名和地址 http://tp6.api.shanliwawa.top:80/index/index Request::domain(1) http://tp6.api.shanliwawa.top Request::time() 请求时间戳 Request::app() 应用名 index Request::controller() 控制器 Index 参数true小写 Request::action() 操作 index 参数true 小写 Request::method(true); 请求类型获取 GET isGet isPost isPut isDelete isAjax isMobile isHead 判断是否某种类型 Request::has(\'id\',\'get\'); 检测变量id是否存在 url(\'index/hello\', [\'id\'=>5,\'name\'=>\'李白\'],\'do\'); http://tp6.api.shanliwawa.top/index/hello/李白.do?id=5 url(\'index/hello#aa\'); 锚点 Cache::set(\'name\', $value, 3600); 1小时后过期 Cache::get(\'name\'); 获取缓存 多缓存类型配置 return [ // 缓存类型为File \'type\' => \'redis\', // 全局缓存有效期(0为永久有效) ,开发下一定要设置-1 否在刷新后 还在 \'expire\'=> -1, // 缓存前缀 \'prefix\'=> \'think\', // 缓存目录 \'host\' => \'127.0.0.1\', ]; return [ // 使用复合缓存类型 \'type\' => \'complex\', // 默认使用的缓存 \'default\' => [ // 驱动方式 \'type\' => \'file\', // 缓存保存目录 \'path\' => \'../runtime/default\', ], // 文件缓存 \'file\' => [ // 驱动方式 \'type\' => \'file\', // 设置不同的缓存保存目录 \'path\' => \'../runtime/file/\', ], // redis缓存 \'redis\' => [ // 驱动方式 \'type\' => \'redis\', // 服务器地址 \'host\' => \'127.0.0.1\', ], ]; use think\facade\Cache; Cache::store(\'file\')->set(\'name\',\'123\',0); $v = Cache::store(\'redis\')->get(\'name\'); Cache::store(\'default\')->get(\'name\');文件缓存 Cache::delete(\'name\'); Cache::clear(); Cache::set(\'name\', [1,2,3]); Cache::push(\'name\', 4); Cache::remember(\'start_time\', time()); 不存在则创建 Cache::inc(\'name\',1); 自增1 Cache::dec(\'name\',1); 自减1 $redis = Cache::handler(); redis对象 配置redis session return [ \'type\' => \'redis\', \'prefix\' => \'think\', \'auto_start\' => true, // redis主机 \'host\' => \'127.0.0.1\', // redis端口 \'port\' => 6379, // 密码 \'password\' => \'\', ] session(\'name\', [\'thinkphp\']); 设置支持字符串 数组 session(\'name\');获取 session(\'name\', null);删除 session(null);清空 cookie(\'name\', \'value\', 3600); 设置不支持数组,序列化后存储 cookie(\'name\'); cookie(\'name\', null); cookie(\'think_lang\',\'en-us\');//设置语言类型 lang(\'add user error\');//翻译 config(\'cache.type\') 读取配置
验证
{:token_field()} 模板中输出令牌
{:token_meta()} ajax提交
$.ajaxSetup({
headers: {
\'X-CSRF-TOKEN\': $(\'meta[name="csrf-token"]\').attr(\'content\')
}
});
Route::post(\'blog/save\',\'blog/save\')->token(); 路由中使用验证
think\facade\Validate
$rule = [
\'name\' => \'require|max:25\',
\'age\' => \'number|between:1,120\',
\'email\' => \'email\',
];
$msg = [
\'name.require\' => \'名称必须\',
\'name.max\' => \'名称最多不能超过25个字符\',
\'age.number\' => \'年龄必须是数字\',
\'age.between\' => \'年龄只能在1-120之间\',
\'email\' => \'邮箱格式错误\',
];
$data = [
\'name\' => \'thinkphp\',
\'age\' => 10,
\'email\' => \'thinkphp@qq.com\',
];
$validate = Validate::rule($rule)->message($msg);
$result = $validate->check($data);
if(!$result) {
dump($validate->getError());
}
路由
Route::get(\'new/<id>\',\'News/read\'); // 定义GET请求路由规则 Route::post(\'new/<id>\',\'News/update\'); // 定义POST请求路由规则 Route::put(\'new/:id\',\'News/update\'); // 定义PUT请求路由规则 Route::delete(\'new/:id\',\'News/delete\'); // 定义DELETE请求路由规则 Route::any(\'new/:id\',\'News/read\'); // 所有请求都支持的路由规则 ->allowCrossDomain();跨域
输出响应
$data=[\'code\'=>200,\'msg\'=>\'信息提示\',\'list\'=>[\'中国\']]; json($data); jsonp($data); xml($data); redirect(\'http://www.thinkphp.cn\'); redirect(\'/index/hello/name\'); //站内跳转 download(\'./static/2.xlsx\'); 下载
数据库
use think\facade\Db; $rs =Db::name(\'user\')->where(\'id\',1)->find(); 查询一条记录 name不含前缀 $rs =Db::table(\'ims_user\')->where(\'sex\', 2)->select(); 多条数据 table含前缀 $rs1 =Db::name(\'user\')->where(\'id\', 1)->value(\'name\'); 查询某个字段值 $rs =Db::table(\'ims_user\')->where(\'sex\', 2)->column(\'name,id\',\'id\'); 返回name,id列,后面是key $userId = Db::name(\'user\')->insertGetId($data);//插入数据返回id Db::name(\'user\') ->limit(100) ->insertAll($data); 插入多条数据,分每次100 Db::name(\'user\') ->where(\'id\', 1) ->update([\'name\' => \'thinkphp\']); 更新 Db::table(\'think_user\')->delete(1); Db::table(\'think_user\')->delete([1,2,3]); Db::table(\'think_user\')->where(\'id\',1)->delete(); Db::name(\'user\')->delete(true);//清空数据 where(\'id\',\'<>\',1) 不等于1 > >= like where("id=:id and username=:name", [\'id\' => 1 , \'name\' => \'thinkphp\']) field(\'id,title,content\') 指定字段 limit(10,25) 第十条开始25条 单数字返回数据条数 page(1,10) 第一页十条 order([\'id\'=>\'desc\',\'sex\'=>\'desc\']) 排序 group(\'user_id,test_time\') 分组 count() max(\'id\') min() avg() sum() 聚合函数 whereTime(\'birthday\', \'>=\', \'1970-10-1\') 支持< = whereTime(\'create_time\',\'-2 hours\') 查询2小时 whereBetweenTime(\'create_time\', \'2017-01-01\', \'2017-06-30\') 查询时间段 whereYear(\'create_time\') 今年 whereYear(\'create_time\',\'2018\') last year 去年 whereMonth(\'create_time\') last month上月 2018-06 具体月份 whereWeek(\'create_time\') last week 上周 whereDay(\'create_time\')今天 yesterday昨天 2018-11-1具体 Db::query("select * from think_user where status=1"); 原生查询 Db::execute("update think_user set name=\'thinkphp\' where status=1");//更新插入删除 Db::query("select * from think_user where id=? AND status=?", [8, 1]);//绑定 $list = Db::name(\'user\')->where(\'status\',1)->paginate(10); 分页每页10条
模型
定义全局常量
define(\'__URL__\',\think\facade\Request::domain(1)); http://tp6.api.shanliwawa.top define(\'__ROOT__\',\think\facade\app::getRootPath()); 系统根目录 C:\www\tp6\ define("PRE",config(\'database.prefix\')); 表前缀
绝对路径获取
\think\facade\app::getRootPath() 根目录C:\www\tp6\ \think\facade\app::getAppPath() 应用路径 C:\www\tp6\app\index\ \think\facade\app::getConfigPath() 配置路径C:\www\tp6\config\ \think\facade\app::version() 核心版本
模板视图
use think\facade\View; View::assign([ \'name\' => \'ThinkPHP\', \'email\' => \'thinkphp@qq.com\' ]); View::assign(\'data\',[ \'name\' => \'ThinkPHP\', \'email\' => \'thinkphp@qq.com\' ]); View::fetch(\'index\'); 助手函数 view(\'index\', [ \'name\' => \'ThinkPHP\', \'email\' => \'thinkphp@qq.com\' ]); 模板输出 {$name} {$data.name} 等价 {$data[\'name\']} {:dump($data)} 使用函数 :开头 {$user.nickname|default="这家伙很懒,什么也没留下"} {$Think.cookie.name} // 输出$_COOKIE[\'name\']变量 {$Think.server.script_name} // 输出$_SERVER[\'SCRIPT_NAME\']变量 {$Think.session.user_id} // 输出$_SESSION[\'user_id\']变量 {$Think.get.page} // 输出$_GET[\'page\']变量 {$Request.param.name} 获取name {$data.name|raw} 不转义输出 {$data.create_time|date=\'Y-m-d H:i\'} {literal} Hello,{$name}! 原样输出 {/literal} {load href="/static/js/common.js,/static/js/common.css" /} 加载js,css {php}echo \'Hello,world!\';{/php} {/* 注释内容 */ } 或 {// 注释内容 } {include file="public/header" /} 模板包含 {include file="Public/header" title="$title" keywords="开源WEB开发框架" /} 传入参数 {foreach $list as $key=>$vo } {$vo.id}:{$vo.name} {/foreach} {for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" } {/for} {if 表达式}value1 {elseif 表达式 /}value2 {else /}value3 {/if}
记录日志
log.php 可添加 \'json\' => 1 表示json格式 trace("日志信息") app.php中 \'app_trace\' => true, trace.php改为默认html \'type\' => \'Console\',
上传
$file = request()->file(\'image\'); 移动到框架应用根目录/uploads/ 目录下 $info = $file->move( \'../uploads\'); if($info){ 成功上传后 获取上传信息 输出 jpg echo $info->getExtension(); 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ 上传失败获取错误信息 echo $file->getError(); } 多文件xphr foreach($files as $file){} 验证,生成带md5文件名 $info = $file->rule(\'md5\')->validate([\'size\'=>15678,\'ext\'=>\'jpg,png,gif\'])->move( \'../uploads\');
原文地址
https://www.kancloud.cn/logoove/we7/1094868