该文章记录在使用PHP Laravel框架过程中遇到的一些问题。Laravel官方文档参考这里。
Laravel 使用 groupBy 报错
问题描述
使用 groupBy 进行多列分组,或者获取列和分组列不相同时会报错。
说明
Laravel5.4以后启用了 mysql 严格语法检查,导致这种 groupBy 会报错。
解决办法
修改时配置文件: config/database.php 将mysql配置的 strict 项修改为 false,关闭严格检查即可。
Laravel 使用 env 函数或者 $_ENV 读取环境变量为空
问题描述
在控制器或者前端模板页面等地方读取 _ENV 变量时,报 undefined 错误,此时输出_ENV 为null
说明
在Laravel项目中,如果执行了 php artisan config:cache 命令会把 app/config 目录下的所有配置文件“编译”整合成一个缓存配置文件到 bootstrap/cache/config.php,每个配置文件都可以通过 env 函数读取环境变量,这里是可以读取的。
但是一旦有了这个缓存配置文件,在其他地方使用 env 函数是读取不到环境变量的,所以返回 null,只有执行以下命令清除配置缓存后才可以读取.
php artisan config:clear
解决办法
在配置文件即 app/config 目录下的其他地方,读取配置不要使用 env 函数或者 $_ENV 变量去读环境变量。
所有要用到的环境变量,在 app/config 目录的配置文件中通过 env 读取,其他地方使用 config 函数读取。示例:
// config 格式: 文件名.变量名
config('app.debug'); // 读取debug配置的值
Laravel encrypter 报错
问题描述
在Windows上偶尔抛出 RuntimeException 异常:The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.
说明
加密模块首先需要开启 PHP 的openssl扩展,这个异常抛出的概率很小,刷新之后有恢复正常了,其原因是在 config/app.php 文件中的 key 配置,默认是 env(‘APP_KEY’),需要从配置文件中读取,在Windows环境下,偶尔会出现文件句柄被占用或者内存原因读取不到配置,所以为空,导致 key 为空,所以报错。
解决办法
执行 php artisan config:cache 命令缓存配置,或者使用 ‘key’ => env(‘APP_KEY’, ‘xxxxx’),将默认值写入。或者直接配置 ‘key’ => ‘xxxxx’。
Laravel 任务调度没有生效
问题描述
在 Console/Kernel.php 的 schedule 中设置的定时任务不生效
说明
一种可能原因是使用了 sendOutputTo 方法将输出写入到某个文件,然而这个文件不存在导致。
解决办法
写入正确的文件绝对路径,需要注意测试环境和生成环境,或者在启动 schedule:run 的时候加入输出文件绝对路径。