thinkphp 6 要点笔记:多应用模式、中间件
开启调试模式
根目录的.example..env
改为.env
文件
Facade 使类无需实例化而直接进行静态方式调用
参考
注意事项, 此时的facade 无法被 IDE 识别,可通过注释方法识别
/**
* @method string hello(string $name) static 读取缓存并删除
*/
class Test extends Facade{
就可以识别函数
若想静态调用系统函数,使用think\facade\xxx
的命名空间
多应用模式
├─app 应用目录
│ ├─index 主应用
│ │ ├─controller 控制器目录
│ │ ├─config 配置目录(优先)
│ │ └─ ... 更多类库目录
│ ├─admin 后台应用
│ │ ├─controller 控制器目录
│ │ ├─config 配置目录(优先)
│ │ └─ ... 更多类库目录
│
├─public WEB目录(对外访问目录)
│ ├─admin.php 后台入口文件
│ ├─index.php 入口文件
│
├─config 应用配置目录
│ ├─index index应用配置
│ └─admin admin应用配置
│
├─route 路由定义目录
│ ├─index index应用路由定义目录
│ └─admin admin应用路由定义目录
│
├─runtime 运行时目录
│ ├─index index应用运行时目录
│ └─admin admin应用运行时目录
开启多应用
config/app.php
'auto_multi_app' => true,
'default_app' => 'index',
//指定默认模块
自动生成应用
把build.php
文件放到app目录下执行
php think build 应用名
中间件
- 生成中间件
php think make:middleware Check
2.设置中间件
class InAppCheck
{
public function handle($request, \Closure $next)
{
if (preg_match('~micromessenger~i', $request->header('user-agent'))) {
$request->InApp = 'WeChat';
} else if (preg_match('~alipay~i', $request->header('user-agent'))) {
$request->InApp = 'Alipay';
}
return $next($request);
}
}
3.应用中间件
//在对应的 middleware.php
return [
app\middleware\InAppCheck::class,
];
或者路由中间件
Route::rule('hello/:name','hello')
->middleware([\app\middleware\Auth::class]);
路由
变量规则
自定义默认的规则
'default_route_pattern' => '[\w\-]+',
局部变量
Route::get('new/:name', 'News/read')
->pattern(['name' => '[\w|\-]+']);
全局变量规则
Route::pattern([
'name' => '\w+',
'id' => '\d+',
]);
验证器的推荐用法
使用显示路径形式说明,方便IDE追踪
try{
$data = $this->request->post();
validate(\app\api\validate\ChildrenValidate::class)
->scene("binding")
->check($data);
// todo...
}catch(ValidateException|CustomException $e){
$this->error($e->getError());
}
THE END