批改状态:合格
老师批语:
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\Viewpublic 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里面的 user1View::assign('user1',$user);return View::fetch();}
<?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/1037484composer 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-viewhttps://www.kancloud.cn/manual/thinkphp6_0/1037608
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号