最近升级php 7.0 到 php7.4,升级完后发现lumen跑不起来了,报如下错误:
lumen 环境是 5.5.2
In ServiceProvider.php line 84:
Trying to access array offset on value of type null
[2021-05-06 20:19:14] lumen.ERROR: ErrorException: Trying to access array offset on value of type null in E:\PHPRoot\gancao_workgroup\gapis_medicine\vendor\illuminate\support\ServiceProvider.php:84
Stack trace:
#0 E:\PHPRoot\gancao_workgroup\gapis_medicine\vendor\illuminate\support\ServiceProvider.php(84): Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}(8, 'Trying to acces...', 'E:\\PHPRoot\\ganc...', 84, Array)
看了源码,是因为这段代码导致的错误,php7.4强制校验对象为null时不可进行数组操作,因此引发了上面的这个 报错信息。
/**
* Register a view file namespace.
*
* @param string|array $path
* @param string $namespace
* @return void
*/
protected function loadViewsFrom($path, $namespace)
{
if (is_array($this->app->config['view']['paths'])) {
foreach ($this->app->config['view']['paths'] as $viewPath) {
if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) {
$this->app['view']->addNamespace($namespace, $appPath);
}
}
}
$this->app['view']->addNamespace($namespace, $path);
}
$this->app->config'view' 这个view不存在时为 null,所以就报错了,php7.4以下没有强制检查,所以正常能过。
但是这个代码是在 vendor 中的,没法修改。
解决方案:
因此想了一个变通的办法,在 /bootstrap/app.php 中完成$app加载时,塞入一个 view对象($app->configure('view')),临时解决这问题。
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);
//此处为增加的代码
if(version_compare(PHP_VERSION,'5.4.0','>=')){
$app->configure('view'); //bug fixd :In ServiceProvider.php line 84
}
希望能帮助到大家,这问题折腾了一个下午。
Comments | NOTHING