php $ 79,thinkphp6入门绕坑

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,会在抛出错误前处理好自己的东西。

你可能感兴趣的:(php,$,79)