1、model 搜索器 2、门面类 3、多应用 4、调试 5、助手函数
public function three (){
// print_r(Request::post());
// 1、method 请求方法 获取当前请求的类型
// print_r(Request::method());
// PHP做接口 给vue 小程序 app,保证数据安全,必须放弃get传值方式 get传值方式在 浏览器上
// 判断 请求方式
// if(Request::method() != 'POST'){
// echo '请用post请求';
// exit;
// }
// echo 'post提交后返回数据';
// exit;
// 2、 isGet isPost
// if(Request::isPost()){
// echo 'post请求';
// }else{
// echo 'get请求';
// }
// print_r(Request::request());
// 全局环境变量
// print_r(Request::server());
// echo time();
// echo '<hr>';
// echo Request::server()['REQUEST_TIME'];
// 3、联表查询 统计数据 时需要
// join 链式操作 任何操作 都要增加表的名称,因为是联表查询 可以给表起别名
// $user =Db::table('lh_user') ->join('lh_order','lh_user.uid=lh_order.uid')->select();
// print_r($user);
// 起别名 注意中间空一格空格 不能空两格空格
// $user =Db::table('lh_user u') ->join('lh_order o','u.uid = o.uid')->select();
// 另外一种起别名的方式 alias join 可以一直加
// $user =Db::table('lh_user') ->alias('u')->join('lh_order o','u.uid = o.uid')->select();
// print_r($user);
// INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
// LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
// RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
// FULL JOIN: 只要其中一个表中存在匹配,就返回行
// $user =Db::table('lh_user') ->alias('u')->leftJoin('lh_order o','u.uid = o.uid')->select();
// print_r($user);
// 使用模型。先引入 app\model\LhUser
// $LhUser = new LhUser();
// $LhUser -> lists();
// $User = new User();
// $User -> lists();
// $User = new User();
// $User -> one();
// $User = new User();
// $data = [
// 'name' => '小心',
// 'password' =>123,
// 'email' =>'1232@qq.com',
// 'register_time' =>'123456780',
// ];
// $User -> insert($data);
// $user =new User();
// $user ->sele();
// $user =new User();
// $sele = $user ->sele();
// print_r($sele);
}
// 注入的方式把普通类 放进方法中 但是每次都要以依赖注入的方式
// 多个时
// public function four (Db $db , Requset $request){
// public function four (Db $db){
// $select = $db ->table('lh_user')->select();
// print_r($select);
// }
// 门面类 获取get传值
// public function five (){
// print_r(Request::get());
// // tp 函数获取get传值
// input('get.');
// input('post.');
// print_r(input('get.'));
// print_r(input('post.'));
// print_r(config());
// // 5、注意 门面类 与普通类 助手函数一些功能是重复的
// }
// public function six(){
// 助手函数
// $user = Db::table('lh_user')->select();
// dump($user);
// }
// 6、多应用http://bite.com/Index.php/index/index/three
// 单应用http://bite.com/Index.php/index/three
// 7、php原生循环 在html 中进行的循环
// <?php
// foreach ($arr as $a ){}
// /?/ >
// 视图引入门面类
// think\facade\View
public function for(){
// echo 111;
// mvc v放在项目里面 index目录
// php 文件名 跟class名对应,代表V的目录
// php方法名 对应v的目录下的index文件下的for方法名 重点 关注 否则无法通过c 访问v视图
echo '11';
$user = Db::table('lh_user')->where('status',1)->select();
foreach($user as $v){
// echo $v['name'].'<br>';
echo '<li style="color:green;">' .$v['name'] . '</li>';
}
// 在c里面获取的数据,要传给v,才能在页面中进行设置,进行循环
// 在c里,我们只返回数据,样式在v里写, m里写对数据库表的操作
// print_r($user);
// 模板变量赋值 key 值
// user 1 给到 视图 里面的$user1 $user 给到 c里面的 user1
View::assign('user1',$user);
return View::fetch();
}
model
<?php
// 模型文件
namespace app\index\model;
use think\Model;
class User extends Model
{
// 设置当前模型对应的完整数据表名称
// protected $table = 'lh_user';
// 设置当前模型的数据库连接
// protected $connection = 'db_config';
// 设置废弃的字段 查询结果就看不到了
// protected $discuse = [
// 'name',
// 'phone'
// ];
// 5 、 数据类型是 php 的类型
// protected $type = [
// 'uid' => 'int',
// 'name' => 'string',
// ];
// protected $pk = 'uid';
// protected $name = 'user';
// public function lists(){
// Db:: 在控制器contraller 用
// 模型里面用 自己的class名称
// 1、select 是tp 自带的方法 在每个model 模型都能直接使用 在任意表中使用
// $ret = User::select();
// print_r($ret);
// 2、 默认 主键为 id 如果是uid查询报错,因此需要增加 where条件
// 可以把主键从id 改为 uid 就不用 where protected $pk = 'uid'; https://www.kancloud.cn/manual/thinkphp6_0/1037580
// 因此 是where 和find 都是可用的 返回的是对象
// 所有的链式操作都是可以用的
// $ret = LhUser::where('uid',1)->find();
// $ret = LhUser::find(1);
// print_r($ret);
// 3、结果跟 controller 用 门面 db 是一样的
// print_r($ret['name']);
// 4、学过的 数据处理都是可以转为 toArray 从对象转为 数组
// print_r($ret ->toArray());
// foreach ($ret as $ret_s){
// if( $ret_s['status'] == 1){
// $ret_s['status']= '开启';
// }else{
// $ret_s['status']= '关闭';
// }
// }
// print_r($ret ->toArray());
// }
// public function One(){
// $ret = User::find(4);
// print_r($ret);
// }
// 6、获取器 格式 :get +字段 +Attr 创建一个方法名
// 6.1 会接受一个参数
// public function getStatusAttr($v){
// 6.2 所有的状态都会传到这个方法里面
// print_r($v);
// if ($v==0){
// $ret ='开启';
// }else{
// $ret ='关闭';
// }
// 这里要return 回去 给查询的那条语句
// return $ret;
// 直接返回 没有把v 使用
// $arr = [
// 0 => '禁用',
// 1 =>'启用',
// 2 =>'待审核',
// ];
// return $arr[$v];
// }
// public function insert($data){
// $ret = User::create($data);
// 注意数据结果 也是要返回,model里面的任何对外的方法 ,都要用return f返回
// return $ret;
// }
// 7、 修改器 :格式 :get +字段 +Attr 创建一个方法名
// 7.1会接受两个传值 1个是 字段值 2全不值
// public function setPasswordAttr($v,$all){
// print_r($v);
// print_r($all);
// return md5($v);
// }
// public function sele(){
// User::withSearch(['name','create_time'], [
// 'name' => 'think',
// 'create_time' => ['2018-8-1','2018-8-5'],
// 'status' => 1
// ])
// ->select();
// withSearch 三个参数 一个 是 字段名 是一个是区间 、 范围、值 第三个比如 传多值就需要第三个参数
// $lists = User::withSearch(
// ['name'],
// ['name' =>'心'],
// ) ->select();
// // 模型里面的方法都需要 retrun 返回自己不做打印输出
// return $lists;
// }
// 1、搜索器 search +字段名 +Attr
// 两个参数 one 是整个查询语句 结果是对象 two搜索的值
// public function searchNameAttr($one,$two){
// print_r($one);
// print_r($two);
// exit;
// $one -> where('name','like','%'.$two.'%');
// }
// 查询后 执行 比如 知道谁操作了数据库 记录日志
// 事件会在新增操作和更新操作都会触发.
// 具体的触发顺序:
// 执行 onBeforeWrite
// 如果事件没有返回`false`,那么继续执行
// 执行新增或更新操作(onBeforeInsert/onAfterInsert或onBeforeUpdate/onAfterUpdate)
// 新增或更新执行成功
// 执行 onAfterWrite
// public static function onAfterRead($u)
// {
// print_r($u);
// $data1 = [
// 'add_time' => time(),
// 'info' => '查询的数据是'.json_encode($u),
// 前后端分离使用token 加密方式传值,前后端不分离 使用session跟cookie 记录
// ];
// print_r($data1);
// }
// 杂项
// 缓存 config/cache.php 文件
}
多应用
https://www.kancloud.cn/manual/thinkphp6_0/1037484
composer require topthink/think-multi-app
调试
https://www.kancloud.cn/manual/thinkphp6_0/1037618
.env文件的定义格式如下:
// 设置开启调试模式
APP_DEBUG = true
// 其它的环境变量设置
// ...
助手函数
https://www.kancloud.cn/manual/thinkphp6_0/1037653
视图
composer require topthink/think-view
https://www.kancloud.cn/manual/thinkphp6_0/1037608