- 打开cmd输入
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 上一步不报错时候运行这一步 创建一个叫tp6 tp6 框架源码
composer create-project topthink/think tp6
-
修改.env 文件
将根目录下的 .example.env 重命名为 .env -
隐藏路由中的index.php
打开 public 找到 .htaccess 添加以下伪静态<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule>
-
切换数据库查询
(1) 复制database下的 mysql 如下 修改名称
(2) 修改.env 文件 复制DATABASE 修改为和demo相同的名称
(3)使用方法/** * 使用Db::name() 时需要配置数据库前缀 */ public function demo () { $data = Db::connect('demo')->name('studio')->where('status',1)->select(); $data = Db::connect('mysql')->name('studio')->where('status',1)->select(); return json($data); }
(修改前)
'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名
'database' => env('database.database', ''),
// 用户名
'username' => env('database.username', 'root'),
// 密码
'password' => env('database.password', ''),
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
(修改后)
'demo' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名
'database' => env('database.database2', 'demo'),
// 用户名
'username' => env('database.username', 'root'),
// 密码
'password' => env('database.password', ''),
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
-
链式操作的查询方法
/**
* 使用 removeOption() 可以删掉上一次查询的内容
*/$getData = $model->where('status', 1)->order('id desc')->limit('10')->find(); $getData = $model->removeOption('where')->order('id desc')->limit('10')->find(); return json($getData);
7.插入数据 当插入的数据没有该字段或发生其他错误时使用strict() 可以忽略错误继续执行
$data = [
'username' => 'demo',
'password' => '123456',
'sex' => 1,
'aaa'=>'dadad',
];
return Db::name('demo')->strict(false)->insert($data); //成功之后返回1
-
修改数据
$data = [ 'username' => 'demo001', ]; return Db::name('demo')->where('id',1)->update($data); ``` * 成功之后返回 1
-
修改的字段自增/自减
return Db::name('demo') ->where('id',1) ->inc('id') ->dec('prix') ->update();
-
删除记录
Db::name('demo')->where('id', 1)->delete(); //删除 id为1 的记录 Db::name('demo')->delete([1, 2, 3, 4]); //删除主键为 1 2 3 4 的记录
-
类型转换
protected $type = [ 'status' => 'boolean', 'create_time' => 'datatime:Y-m-d' ];
-
设置放废弃字段 :设置之后这个字段就不在查询列表里了,写入忽略
protected $disuse = [‘email’, ‘uid’, ‘create_time’];
13.
//数据库写入json字段 直接通过数组的方式即可完成
//DB 方式$data = [ 'username' => 'zhangsan', 'email' => 'admin@qq.com', 'mobile' => '188888888', 'list' => ['x' => 1.68, 'y' => 2.68, 'z' => 3.68], ]; Db::name('demo')->json(['list'])->insert($data);
/**
* 模型方式
* 前置条件: 在model中设置修改的字段 protected $json = [‘list’];
* 使用模型方式去新增你包涵json数据的字段
*///实例化模型 $model = new DemoModel(); //新增数据 $model->username = 'zahngsan002'; $model->email = 'admin@qq.com'; $model->mobile = '188888888'; $model->uid = '001'; $model->status = '1'; $model->list = ['username'=>'zhangsan003','status'=>1]; $model->save();
}
14.查询带有json数据的记录
public function test002()
{
Db::name('demo')->json(['list'])->find(1001);
}
使用对象方式来对数据进行增删改查
调用对象 使用对象的方式来修改和查询数据
public function obj()
{
$getData = DemoModel::where('list->usernaem', 'zhangsan')->find();
//使调用对象直接查询指定id的记录
$getData = DemoModel::find(1001);
//return $getData;
//更新修改json数据 直接通过对象的方法
$getData = DemoModel::find(1001);
$getData ->usernme = 'zhangsan003';
$getData->save();
}
* 软删除 和 真删除
*软删除后的数据查询方法
public function del()
{
$id = 1001;
//软删除
$data001 = DemoModel::destroy($id);
//真删除
$data002 = DemoModel::delete($id);
//软删除加未删除数据的查询方法
$getData = DemoModel::withTrashed()->select();
//return json($getData);
//软删除加未删除数据的查询方法
$getData = DemoModel::withTrashed()->find($id);
//return json($getData);
//查询所有软删除的数据
$getData = DemoModel::onlyTrashed()->select();
//return json($getData);
//将软删除的数据恢复为正常数据
$getData = DemoModel::onlyTrashed()->find($id);
$getData->restore();
//使用软删除方法进行真删除
$data001 = DemoModel::destroy($id,true);
}
路由
默认开启 关闭需要在confi / route.php
with_routh =>false
请求变量
\think\facade\Request::param(); //接收数据
\think\facade\Request::get(); //get方法接收
\think\facade\Request::post(); //post方法接收
\think\facade\Request::ip(); //获取当前ip
\think\facade\Request::controller(); //获取当前控制器名称
\think\facade\Request::isGet(); //判断是否为get方法
\think\facade\Request::isPost(); //判断是否为post方法
\think\facade\Request::isPut(); //判断是否为put方法
\think\facade\Request::isDelete(); //判断是否为delete方法
\think\facade\Request::isJson(); //判断是否为json方法
\think\facade\Request::isHead(); //判断是否为header方法
等方法...
public function re($id,$username, $where =[])
{
// 在方法中添加对应接收的参数
// 例如: 参数为username 接收时添加 $usernaem
// 相当于 $username = input('username');
$data = DemoModel::where(['id' => $id, 'username' => $username])->where($where)->find();
}
响应输出和重定向
//响应输出 包括 return viwe() json();
//默认以html格式输出 如果发起json 请求则输出json格式;
//背后是 response 对象 可以认用response() 输出达到相同的效果;
$data = DemoModel::where('status',1)->where($where)->find();
return response($data);
//使用 response()方法可以设置第二种参数 状态码或调用 code()方法;
return response($data,200);
return response($data)->code(200);
//return view() json() 返回的数据类型是不同的,但是效果一样
return json($data,200);
return json($data)->code(200);
//不仅可以设置状态码还可以添加header头部信息
return json($data)
->code(200)
->header(['Cache-control'=>'no-cache,must-revalidate']);
//重定向 redirect
return redirect('https://www.baidu.com');
//站内重定向
return redirect('/admin/active/index',201);
return redirect(url('admin/index'));
//附加session信息
return redirect(url('admin/index'))->with('name','zhangsan');
验证器
生成app/validate/Demo.php 验证器
命令行: php think make:validate Demo
//demo 示例代码
//字符串格式
protected $rule = [
'username|用户名' => 'require|max:6|checkName:张三',
'password|密码' => 'require|min:6|max:11',
'mobile|手机号' => 'require|max:11',
//验证邮箱,手机号,身份证,等等时可以使用正则表达
'email|邮箱' => 'email',
];
//数组格式
protected $rule = [
'username|用户名' => [
'require' => 'require',
'max' => 6,
'checkName' => '张三',
],
'password|密码' => [
'require' => 'require',
'max' => '6',
'min' => '11',
],
'mobile|手机号' => [
'require' => 'require',
'max' => '11',
],
'email|邮箱'=>[
'email'=>'email',
],
];
//message提示文字
protected $message = [
'username.require' => '用户名不能为空!',
'password.require' => '密码不能为空!',
'mobile.require' => '手机号不能为空!',
'username.max' => '用户名过长!',
'password.min' => '密码不能低于6位',
'password.max' => '密码不能超过11位',
'mobile.max' => '手机号格式错误,请输入正确的手机号!',
'email' => '邮箱格式错误!',
];
//验证场景
protected $scene =[
'create'=>['username','password','mobile','email'],
'edit'=>['username','mobile'],
];
//自定义规则 名称中不得含有 张三
//过滤注册或修改昵称时用户输入非法字符串
protected function checkName($value,$rule,$data,$field,$title)
{
return $rule != $value ? true : ' 名称存在非法称谓!';
}
页面标签的使用
eq标签
eq/equal => 等于,
neq/notequal => 不等于,
gt => 大于,
egt => 大于等于,
lt => 小于,
elt/equal => 小于等于,
heq => 恒等于,
nheq => 不恒等于
{switch $data} //$data 是对应控制器渲染时输出的参数
{case 1|2} 输出1 {/case}
{case 3|4} 输出3 {/case}
{case 5|6} 输出5 {/case}
{case 7 } 输出7 {/case}
{default /} 不存在
{/switch}
if( ($data >10) OR ($data = 0 ))
OK
{else if ($data =100)}
NOT
{/if}