补充知识:
生成sql语句但是不会执行sql语句
public function fetchSqlTest(){
$result = Db::name('user')->fetchSql(true)->select();
//dump($result);
//使用正常select查询默认中select(true)改为false即可返回sql语句
$result = Db::name('user')->select(false);
//dump($result);
//返回上一条查询语句
$result = Db::name('user')->getLastSql();
//dump($result);
//buildSql构造子查询
$result = Db::name('user')->buildSql();
//dump($result);
}
日志
需要掌握的知识点
能够自己在不看官方文档的情况下写出日志初始化文件
Log::init([
'type' = 'File',
'path' = APP_PATH.'logs/'
]);
错误以及调试
需要在application目录下的config.php中开启
数据库调试在application目录下的database.php文件中开启
验证
验证器
两种情况
在功能模块中独立验证 创建validate验证器
$data = input(); 由input获取,那么则可以在地址栏进行传递验证器需要的验证规则,只有姓名是必须的,那么只需要传递姓名即可,其他是可选
验证器在某些场景下是不需要执行的,所以就有了验证场景这一限制
<?php
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
/*
* 验证规则
* */
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
/**
* 错误信息
*/
protected $msg = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄必须在1~120之间',
'email' => '邮箱格式错误',
];
/**
* 验证场景
*/
protected $scene = [
'add' => ['username'],
'edit' => ['username', 'password', 'email', 'mobile'],
];
}
通过验证器给出的场景,在功能中调用即可
//使用验证器验证
public function validate2(){
$data = input();
$validate = Loader::validate('User');
if(!$validate->scene('add')->check($data)){
dump($validate->getError());
}
$this->success('验证成功','','',10);
}
内置规则
https://static.kancloud.cn/manual/thinkphp5/129356
表单令牌
这里的__token__跟session cookie中提到的token不一样
__token__:是为了验证用户是否从表单提交
token:Token 是一种令牌,它是一个随机生成的字符串,用于识别用户的身份。Token 通常被用作一次性令牌,用于防止跨站请求伪造 (CSRF) 攻击。在 PHP 中,可以使用函数 `uniqid()` 来生成一个唯一的 token。