1、坑:中间件获取不到控制器和动作。解决:在路由配置中注册中间件便可以获取到。
2、坑:自带验证码输入参数错误。解决:新的自带验证码只能输入配置名称参数,所以可以用动态添加配置的办法,代码如下:
Config::set(['VeryCode' => [
// 验证码字体大小
'fontSize' => 32,
'useNoise' => true,//杂点
'useCurve' => false, //混淆曲线
// 验证码位数
'length' => 4,
'imageH' => '',
'imageW' => '',
]], 'config');
//$captcha = new Captcha($config);
return Captcha::create('VeryCode');
3、坑:默认session没有开启,导致一些应用session的场景错误,例如验证码。解决:需要在全局中间件配置文件中开启,\think\middleware\SessionInit::class。注:这个坑是自找的,文档中有详细说明。
4、坑:model()助手没有了,以前有model助手时,可以在基类通过model($this->_name)实现和模型的绑定,这样,常规的查列增改删操作就可以不用在子控制器里写了。解决:暂时只找到一个比较笨的办法,就是通过invoke助手实现,代码如下:
$app = app('http')->getName();
$model = invoke('\app\\'.$app.'\model\\'.$this->_name) ;
5、坑:thinkphp6多应用模式下的路由配置。解决:一是需要在需要的应用下面建立route文件夹,然后在里面建立app.php文件,在app.php文件中配置路由,但这时的路由必须包含应用名,例如http:://tp6.com/index/article/15.html,必须带index这个应用名;二、如果不要这个应用名,则必须在config下app.php文件中配置 如下:
'domain_bind' => [
'www.tp6.com' => 'index',
'admin.tp6.com' => 'admin',
],
而且,要绑好域名。
我感觉这确实是个大坑,同时也更能明白tp6多应用和5.1版本多模块的区别。
6、坑:session完全重写,如果使用Session::set('name','abc');或者session('name','abc');后主动使用exit中断,则session不会写入。解决:在程序中要用return 中断执行而不要使用exitexit中断执行。注意:在出错时,thinkphp会将之前的session写入后才中断,也就是说thinkphp接管了debug,会在抛出错误前处理好自己的东西。