Thinkphp

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 增删改查
  • 零碎知识点
    • json_encode,json_decode
    • array_key_exists(‘关键字’,访问对象)
    • 对于二维数据的遍历
    • 关于访问路径的理解
  • 项目实战
    • 书本搜索界面
    • 用户搜索界面
  • 总结


前言

更新对于Thinkphp的学习笔记,顺便练习Markdown的写的方法。
友情提示: 这是主要是有基础的同学来复习查看。


增删改查

   public function add(Request $request){
        $user = new User();
        //用户输入的数组
        $buffer = $request->get();
        //符合条件的数组
        $data = [];
        $must_keys = ['ID', 'name'];//必要信息
        $unmust_keys = ['age', 'book1_ID', 'book2_ID'];//不必要信息
        foreach ($must_keys as $key){//ID ,name
            //逐个判断必要参数是否存在,并添加
            if(array_key_exists($key, $buffer)){
                $data[$key] = $buffer[$key];
            }else{
                return '新建信息不合法';
            }
        }
        foreach ($unmust_keys as $key){//age,ID1,ID2
            //逐个判断非必要参数是否存在,并添加
            if(array_key_exists($key, $buffer)){
                $data[$key] = $buffer[$key];
            }
        }
        $res = $user->where('ID', $data['ID'])->find();
        if($res){
            return '用户已存在';
        }else{
            //写入数据库
            User::create($data);
            return '添加成功';
        }
    }

  public function kill(Request $request)
    {
        $user = new User;
        $buffer = $request->post();
        $res = $user->where('ID',$buffer['ID'])->find();
        if($res)
        {
            $name = $res['name'];
            $user->where('ID',$buffer['ID'])->delete();
            return '已删除'.$name;
        }
        else return '学生不存在';
    }

   public function check(Request $request){
        $user = new User();
        //用户输入的数组
        //  $request=Request::instance();同理
        $buffer = $request->post();
        $unmust_keys = ['name','age', 'ID1', 'ID2'];
            if(!array_key_exists('ID', $buffer)){
                return '更新信息不合法';
            }
          $data = [];
        $res = $user->where('ID',$buffer['ID']);
        if(!$res) return '用户不存在';
        foreach ($unmust_keys as $key){
            //逐个判断非必要参数是否存在,并添加
            if(array_key_exists($key, $buffer)){
                $data[$key] = $buffer[$key];
            }
        }
        $user->where('ID',$buffer['ID'])->update($data);
        return '更新成功';

    }

find()查找出来的是第一个符合条件的数据,代码示例:
   public function query(Request $request)
    {
        $user = new User;
        $buffer = $request->post();
        $res = $user->where('ID',$buffer['ID'])->find();
        if($res)
        return json($res);
        else return '学生不存在';
    }
select()返回的是所有符合条件的数据,代码示例:
 public function query(Request $request)
    {
        $user = new User;
        $buffer = $request->post();
        $res = $user->where('ID',$buffer['ID'])->select();
        if($res)
        return json($res);
        else return '学生不存在';
    }

零碎知识点

json_encode,json_decode

json_encode
json_decode是一对
把字符串和json来回转换

假设前端返回的数据是:
searchParams:{“ID” : “1001”}
此时想要用ID该怎么办呢?

Thinkphp_第1张图片

解释一下:前端请求方式为post, r e s 读取前端传来的参数中关键字为: s e a r c h P a r a m s 的数据,此时 res读取前端传来的参数中关键字为:searchParams的数据,此时 res读取前端传来的参数中关键字为:searchParams的数据,此时res={“ID” : “1001”},字符串型的,需要把它转换成json型的,则就是第三句,此时就是 r e s [ " I D " = > " 1001 " ] 了,最后一句则就是可以直接调用 res["ID"=>"1001"]了,最后一句则就是可以直接调用 res["ID"=>"1001"]了,最后一句则就是可以直接调用res[‘ID’]查询ID对应的数值了,所以此时$value的值为1001;json_encode则是同理;


array_key_exists(‘关键字’,访问对象)

查询某个东西是否存在

假设前端传来一堆数据,其中你不确定是否存在某个数据,然后你有需要用到它,对于一个不存在的数据,加以访问是会报错的,假设你想访问$res里的ID

一般会写:if($res[‘ID’]!=null)

这是判断$res里的ID是否存在,但是这样也就访问了它了已经,如果ID不存在,则会报错;

正确写法是:if(array_key_exists(‘ID’, $res))

这样写的话,则就不会报错。


对于二维数据的遍历

假设存在以下数据:

$data = [
0 : [ 'ID' : '1001' ]
1 : [ 'ID' : '1002' ]
]

需求,我想用ID里的数值
解决方法:

   foreach($data as $key => $res)
           {
              balabala...
           }

此时, r e s 对应的数值就是当前遍历到的键对应的数值,也就是 res对应的数值就是当前遍历到的键对应的数值,也就是 res对应的数值就是当前遍历到的键对应的数值,也就是data[0][‘ID’]等价于 r e s [ ′ I D ′ ] 的, res['ID']的, res[ID]的,key在这个循环里遍历的数值就是0,1。


关于访问路径的理解

这里访问的地址是:localhost:8080/index/index/index
其中index/index/index是个相对路径
代表php的url也就是访问路径的三级模式:模块/控制器/接口

这里特别提醒,控制器指的只是controller这个文件夹,如果想要访问其他地方的,需要经过这个地方,在其内部接口里再调用,不可以直接访问。


项目实战

书本搜索界面

Thinkphp_第2张图片

接口名为getBookJson

实现功能:1,若无参数传过去则把数据库里的所有书本信息输出,并且按照每页十条(可选)信息进行分页并且书本按照ID从小到大排列;
2,有参数传过去,三个参数:ID,name,publisher;这三个参数至少有一个传过去了。将符合条件的书本信息输出,并且按照每页十条(可选)信息进行分页并且书本按照ID从小到大排列;

图例:

1,没有参数传输:
Thinkphp_第3张图片需要说明一下

2有参数传输:
Thinkphp_第4张图片
需要说明一下:searchParams的类型数据字符串类型,接受到它的数据后需要进行一步:

$res=json_decode($res, true);

将其转换为json类型,详情参考本文的零碎知识点的json_encode,json_decode这一部分。

代码示例:

public function getBookJson(){
            $book =new Book;
            $request=Request::instance();
            $res=$request->get('searchParams');
            $page=$request->get('page');
            $limit=$request->get('limit');
            $res=json_decode($res, true);//json_decode把字符串类型翻译成json
                                                  //json_encode把数组翻译成json类型
       $count=0;
       if($res!=null)
       {
           if(array_key_exists('ID', $res))
           {
               $book_data =$book->where('ID',$res['ID'])->order('ID','isc')->page($page,$limit)->select();
               //分页使用->page(页数, 每页记录数)实现
               $count=$book->where('ID',$res['ID'])->count();
               //$count返回的是总共有多少个符合条件的数据,然后把这些数据按照要求的每页记录数(page)来分页展示
           }

           else if(array_key_exists('name', $res))
           {
               $book_data =$book->where('name',$res['name'])->order('ID','isc')->page($page,$limit)->select();
               //利用参数ID升序使用->order('ID', 'isc')实现,isc为升序,desc为降序
               $count=$book->where('name',$res['name'])->count();
           }

           else
           {
               $book_data =$book->where('publisher',$res['publisher'])->order('ID','isc')->page($page,$limit)->select();
               $count=$book->where('publisher',$res['publisher'])->count();
           }

           $data = [
               "code"  => 0,
               "msg"   => "",
               "count" =>$count,
               "data"  => $book_data
           ];
           return json($data);
       }
         else
         {
             $book_data =$book->order('ID','isc')->page($page,$limit)->select();
             $count=$book->count();
             $data = [
                 "code"  => 0,
                 "msg"   => "",
                 "count" =>$count,
                 "data"  => $book_data
             ];
             return json($data);
         }

   }

用户搜索界面

接口名:getUserJson

预想界面:
Thinkphp_第5张图片

需求:1,只显示ID,name,limit
首先数据库理limit只有1,2:1代表管理员权限,2代表学生权限
2,分页(page),每页多少条(limit);

返回参数:page:页数,limit:每页多少条信息

![在这里插入图片描述](https://img-blog.csdnimg.cn/af5d864945fa44428119cecb28d12891.png

  public function getUserJson()
    {
        $request=Request::instance();
        $res=$request->get('searchParams');
        $page=$request->get('page');
        $limit=$request->get('limit');
        $res=json_decode($res, true);
        $user =new User();
        if($res!=null)
        {
            $para=[];
          if(array_key_exists('ID',$res))
          {
             $para['ID']=$res['ID'];
          }
            if(array_key_exists('name',$res))
            {
                $para['name']=$res['name'];
            }
            if(array_key_exists('limit',$res))
            {
                $para['limmit']=$res['limit'];
            }
            $count=$user->where($res)->count();
            $userdata=$user->where($res)->order('ID','isc')
                           ->field('ID,name,limit')
                           ->page($page,$limit)
                           ->select();
            return [
                'code' =>0,
                'msg' => '',
                'count' => $count,
                'data' => $userdata
            ];
        }
        $count=$user->count();
        $userdata=$user->order('ID','isc')
                       ->page($page,$limit)
                       ->field('ID,name,limit')
                       ->select();

       return [
         "code" => 0,
         "msg" => "",
         "count" => $count,
         "data" => $userdata
       ];
      // return json($data);
    }
    



总结

唯有总结方可巩固,唯有复习方可进步。

你可能感兴趣的:(thinkphp,php)