• ThinkPHP 5.0 控制器-》请求-》数据库


    ThinkPHP 5.0 控制器-》请求-》数据库

    控制器总结

    1. 无需继承其他的类(若继承了Think/Controller,可直接调用view函数渲染模板),位置处于application模块下controller文件,返回的数据格式无需特别定义,直接使用renturn返回,模板输出可以直接调用view方法
    2. 一般用于数据的传输,对前端的数据的输出,后台数据的的传输(数据交至模型层),但不涉及业务逻辑操作。

    请求

    可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息。

    1. 检测变量
        Request::instance()->has('id','get');
        Request::instance()->has('id','post');
        input('?get.id');
        input('?post.id');
    
    1. 获取变量
    • PARAM变量,框架提供的用于自动识别GET、POST或者PUT请求的一种变量获取方式,是系统推荐的获取请求参数的方法
    // 获取当前请求的name变量
    Request::instance()->param('name');
    // 获取当前请求的所有变量(经过过滤)
    Request::instance()->param();
    // 获取当前请求的所有变量(原始数据)
    Request::instance()->param(false);
    // 获取当前请求的所有变量(包含上传文件)
    Request::instance()->param(true);
    
    // 或者助手函数
    input('param.name');
    input('param.');
    或者
    input('name');
    input('');
    
    • GET 变量
    Request::instance()->get('id'); // 获取某个get变量
    Request::instance()->get('name'); // 获取get变量
    Request::instance()->get(); // 获取所有的get变量(经过过滤的数组)
    Request::instance()->get(false); // 获取所有的get变量(原始数组)
    
    • POST 变量
    Request::instance()->post('name'); // 获取某个post变量
    Request::instance()->post(); // 获取经过过滤的全部post变量
    Request::instance()->post(false); // 获取全部的post原始变量
    
    • 同样用法还有session,cookie
    1. 过滤变量
      框架默认没有设置任何过滤规则,
    // 默认全局过滤方法 用逗号分隔多个
    'default_filter'         => 'htmlspecialchars',
     // 支持设置多个过滤方法
    Request::instance()->filter(['strip_tags','htmlspecialchars']),
    
    
    // 可以在获取变量的时候添加过滤方法
    Request::instance()->get('name','','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤
    Request::instance()->param('username','','strip_tags'); // 获取param变量 并用strip_tags函数过滤
    Request::instance()->post('name','','orgFilter::safeHtml'); // 获取post变量 并用orgFilter类的safeHtml方法过滤
    
    
    // 只获取当前请求的id和name变量
    Request::instance()->only('id,name');
    // 只获取GET请求的id和name变量
    Request::instance()->only(['id','name'],'get');
    // 只获取POST请求的id和name变量
    Request::instance()->only(['id','name'],'post');
    
    / 排除id和name变量
    Request::instance()->except('id,name');
    // 排除GET请求的id和name变量
    Request::instance()->except(['id','name'],'get');
    // 排除POST请求的id和name变量
    Request::instance()->except(['id','name'],'post');
    
    // input函数支持对变量使用修饰符功能,可以更好的过滤变量,默认为s,特定类型必须指定修饰符
    input('get.id/d');
    input('post.name/s');
    input('post.ids/a');
    Request::instance()->get('id/d');
    
    修饰符	作用
    s	强制转换为字符串类型
    d	强制转换为整型类型
    b	强制转换为布尔类型
    a	强制转换为数组类型
    f	强制转换为浮点类型
    

    数据库

    链接数据库
    1. 配置文件设置:应用目录或者模块目录下面的database.php中添加下面的配置参数
    return [
        // 数据库类型
        'type'        => 'mysql',
        // 数据库连接DSN配置
        'dsn'         => '',
        // 服务器地址
        'hostname'    => '127.0.0.1',
        // 数据库名
        'database'    => 'thinkphp',
        // 数据库用户名
        'username'    => 'root',
        // 数据库密码
        'password'    => '',
        // 数据库连接端口
        'hostport'    => '',
        // 数据库连接参数
        'params'      => [],
        // 数据库编码默认采用utf8
        'charset'     => 'utf8',
        // 数据库表前缀
        'prefix'      => 'think_',
        // 数据库调试模式
        'debug'       => false,
        // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
        'deploy'      => 0,
        // 数据库读写是否分离 主从式有效
        'rw_separate' => false,
        // 读写分离后 主服务器数量
        'master_num'  => 1,
        // 指定从服务器序号
        'slave_no'    => '',
        // 是否严格检查字段是否存在
        'fields_strict'  => true,    
    ];
    
    1. 方法配置
    Db::connect([
        // 数据库类型
        'type'        => 'mysql',
        // 数据库连接DSN配置
        'dsn'         => '',
        // 服务器地址
        'hostname'    => '127.0.0.1',
        // 数据库名
        'database'    => 'thinkphp',
        // 数据库用户名
        'username'    => 'root',
        // 数据库密码
        'password'    => '',
        // 数据库连接端口
        'hostport'    => '',
        // 数据库连接参数
        'params'      => [],
        // 数据库编码默认采用utf8
        'charset'     => 'utf8',
        // 数据库表前缀
        'prefix'      => 'think_',
    ]);
    // 或者
    Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8');
    
    1. 模型
      模型类中可以设置 $connection 配置,访问该模型时链接对应数据库,同时支持使用数据库连接的配置名称
    /在模型里单独设置数据库连接信息
    namespace appindexmodel;
    
    use thinkModel;
    
    class User extends Model
    {
        // 直接使用配置参数名
        protected $connection = 'db_config1';
    }
    
    
    
    1. 获取器:获取器的作用是在获取数据的字段值后自动进行处理。
    class User extends Model 
    {
        // 字段名为方法名(数据库已有字段)
        public function getStatusAttr($value)
        {
            $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
            return $status[$value];
        }
        
        public function getStatusTextAttr($value,$data)
        {
            $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
            return $status[$data['status']];
        }
    }
    
    1. 自动插入时间戳
    // database.php中开启自动写入时间戳字段
    'auto_timestamp' => true,
    
    // 或者在模型中设置
    protected $autoWriteTimestamp = true;
    // 注意,自动写入字段类型为int,且字段名默认为:create_time update_time,如果要修改字段类型及写入字段名称,则需要重新设置
    
    // database.php开启自动写入时间戳字段
    'auto_timestamp' => 'datetime',
    // 或者在模型中设置
    protected $autoWriteTimestamp = 'datetime';
    // 定义时间戳字段名
    protected $createTime = 'create_at';
    protected $updateTime = 'update_at';
    
    1. 只读字段:只读字段用来保护某些特殊的字段值不被更改,这个字段的值一旦写入,就无法更改
    namespace appindexmodel;
    
    use thinkModel;
    
    class User extends Model
    {
       // 设置只读字段,执行更新方法之前会自动过滤掉只读字段的值,避免更新到数据库
    	protected $readonly = ['name','email'];
    }
    
    1. 软删除:在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复
    namespace appindexmodel;
    
    use thinkModel;
    // 使用软删除需要引入代码复用包
    use traitsmodelSoftDelete;
    
    class User extends Model
    {
        use SoftDelete;
        // 定义删除时间
        protected $deleteTime = 'delete_time';
    }
    
    
    // 操作删除,传入参数true则为真删除
    User::destroy(1);
    User::destroy(1,,true);
    
    $user->delete();
    $user->delere(true);
    
    1. 聚合函数(常用):max min avg count sum
  • 相关阅读:
    php根据时间显示刚刚,几分钟前,几小时前的实现代码
    PHP中获取当前页面的完整URL
    PhpExcel中文帮助手册|PhpExcel使用方法
    洛谷P1781 宇宙总统【排序+字符串】
    洛谷P1579 哥德巴赫猜想(升级版)【水题+素数】
    洛谷P1478 陶陶摘苹果(升级版)【水题】
    洛谷P1002 过河卒【dp】
    51Nod
    排序算法总结(C++)
    UVA1339
  • 原文地址:https://www.cnblogs.com/maomojun/p/9340616.html
Copyright © 2020-2023  润新知