ThinkPHP笔记

moran
2020-09-07 / 0 评论 / 687 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年04月14日,已超过72天没有更新,若内容或图片失效,请留言反馈。

thinkphp note


ThinkPHP

资源路由:对应不同请求执行控制器中不同的方法

通过 php think make:controller User 自动创建资源控制器

请求控制方法:不同请求控制不同控制器方法

静态资源常量定义

thinkphp5.*版本中在config/template下定义静态资源文件常量

thinkphp6.*版本中在config/view下定义静态资源文件常量

例:
//引入资源文件
'tpl_replace_string'=>[
    '__CSS__'=>'/static/css',
    '__JS__'=>'/static/js'
]

获取器

当触发取值(等)操作时自动触发,分为模型获取器和控制器获取器(动态获取器)。可用于将状态码转换为中文

  • 模型获取器

    语法例子:
    public function getFieldAttr(){}
    // status获取器
    public function getStatusAttr($value){
      $status = ['0'=>'待审核','1'=>'通过'];
    return $status[$value];
    }
  • 动态获取器

    User::withAttr('name',function($value,$data){});
    例子:
    User::withAttr('name', function($value, $data) {
     return strtolower($value);
    })->select();

搜索器

当执行withSearch方法时触发。

  • 模型

    第一个参数是Db对象,第二个参数是控制器中定义的相对字段的规则内容,第三个是控制器中定义的所有规则内容。

    public function searchFieldAttr(){}
    例子:
    public function searchNameAttr($query, $value, $data)
    {
       $query->where('name','like', $value . '%');
    }
    
    public function searchCreateTimeAttr($query, $value, $data)
    {
     $query->whereBetweenTime('create_time', $value[0], $value[1]);
    }   

控制器

两个数组参数,第一个参数是被搜索的字段数组(还可以加别名),第二个参数是被搜索字段匹配的规则,和模型中定义搜索器的内容有关,第二个参数还可以自己加一些别的如sort,可以在模型中通过$data参数获取。

User::withSearch(['name','create_time'], [
   'name'            =>    'think',
   'create_time'    =>    ['2018-8-1','2018-8-5'],
   'status'        =>    1
])->select();

修改器

验证器

validate验证器,用于数据校验,当执行validate助手方法的check或其他验证方法触发

  • 普通验证

    • 验证器类
     namespace app\validate;
     use think\Validate;
     class User extends Validate
     {
         // 定义规则
         // require=>不能为空,max=>最大值,number=>数字
         protected $rule =   [
             'name'  => 'require|max:25',
             'age'   => 'number|between:1,120',
             'email' => 'email',    
         ];
         // 定义错误信息
         protected $message  =   [
             'name.require' => '名称必须',
             'name.max'     => '名称最多不能超过25个字符',
             'age.number'   => '年龄必须是数字',
             'age.between'  => '年龄只能在1-120之间',
             'email'        => '邮箱格式错误',    
         ];
     
     }

    也可以通过 php think make:validate User 快速创建验证器模板

    • 控制器类
     namespace app\controller;
     use app\validate\User;
     use think\exception\ValidateException;
     
     class Index
     {
         public function index()
         
             try {
                 // batch输出全部验证错误信息
                 // check中的参数是需要被验证的内容(一般是request()->param())
                 validate(User::class)->batch(true)->check([
                     'name'  => 'thinkphp',
                     'email' => '[email protected]',
                 ]);
             } catch (ValidateException $e) {
                 // 验证失败 输出错误信息
                 dump($e->getError());
             }
         }
     }

    内置验证规则:内置验证规则

    也可以自己创建验证方法,然后在验证器类的rule中写自己方法的名字即可。

    验证方法可以传入的参数共有5个(后面三个根据情况选用),依次为:
    验证数据
    验证规则
    全部数据(数组)
    字段名
    字段描述

  • 场景验证

    加一个新的属性scene,对不同场景选择不同的验证内容

    • 验证器类

      namespace app\validate;
       
      use think\Validate;
       
      class User extends Validate
      {
        protected $rule =   [
            'name'  => 'require|max:25',
            'age'   => 'number|between:1,120',
            'email' => 'email',    
        ];
      
        protected $message  =   [
            'name.require' => '名称必须',
            'name.max'     => '名称最多不能超过25个字符',
            'age.number'   => '年龄必须是数字',
            'age.between'  => '年龄只能在1-120之间',
            'email'        => '邮箱格式错误',    
        ];
      
        protected $scene = [
            'edit'  =>  ['name','age'],
        ];    
      }
    • 控制器类

      $data = [
         'name'  => 'thinkphp',
         'age'   => 10,
         'email' => '[email protected]',
      ];
      
      try {
         validate(app\validate\User::class)
             ->scene('edit')
             ->check($data);
      } catch (ValidateException $e) {
         // 验证失败 输出错误信息
         dump($e->getError());
      }
      

      也可以单独的设置某个场景验证

       public function sceneEdit(){}

    具体:场景验证

表单令牌(token)

避免跨站攻击和伪造请求。

表单令牌

分页

  • limit分页

    • 单个参数

    获取指定的记录数

    • 两个参数

    获取第 (第一个参数) 个记录后的 (第二个参数) 条数据

  • page分页

    需要两个参数,第一个参数是第几页(从0开始),第二个参数是显示的条数

  • paginate分页

    • 一个参数

      分页每页显示多少条数据

    • 两个参数

      第二个参数为总记录数

    • 函数

      • render函数

      分页显示

      • total函数

      总记录数

    paginate支持指定页显示条数,指定当前页,指定html文档中的分页变量

    paginate分页具体:分页具体

    unset可以用来删除数组指定键。

        unset($class['class_name']);

    模板中的继承(引入)

    模板中通过{extend name="public/base"}来继承

    模板中的占位

    前提是引入了包含占位的文件

    模板中通过{block name="main"}{/block}占位

    数据表的关系

    • 一对一

    列如用户表和身份证表,一个用户只能有一个身份证号,一个身份证号只能对应一个用户

    ThinkPHP相关例程

    • 一对多

    列如班级表和学生表(学生隶属班级属于中间表),一个班级可以有多个学生,而一个学生只能属于一个班级

    ThinkPHP例程

    • 多对多

    列如班级表和老师表,中间表是老师教导的班级,一个老师可以对应多个班级,一个班级可以有多个老师

    ThinkPHP例程

    ThinkPHP命令行

    链接
    中间表模型类必须继承thinkmodelPivot
    中间表模型的基类Pivot默认关闭了时间戳自动写入
    其他函数:TP中distinct()的用处主要是去除重复的值

1

评论 (0)

取消