• 前言

    首先这种问题一般不会出现, 但是这个代码是别人写的, 里面相关的情况不是很清除, 网上的答案有很多,  包括在 `config/app.php` 里面在启动的时候被注册了导致的, 我顺着这个放心也查了很久, 最后找到原因, 答案不是这个
  • 错误源以及错误表现

    执行 `composer install -vvv` 到最后一步时就报错, 错误内容为代码报错, 代码内容大概是服务间登录, 获取token, 然后在配置不存在或者配置的地址不能联网的情况下, 执行这个服务间登录的代码, 就会取不到数据, 那段代码直接去返回的数组的键值, 然后出现了报错
    简单来说, 那个服务间的类被实例化就会出错, 因为实例化的时候调用了服务间登录的方法
  • 检查方向

    1. 网上的答案有很多,包括在 `config/app.php` 里面在启动的时候被注册了导致的, 我顺着这个放心也查了很久
    2. 然后我就把检索了所有的代码文件, 看看哪些地方使用了这个类, 后来发现在 `\App\Console\Commands\FixData.php` 中发现了可以的地方, 这个目录下的文件显然是一个自定义命令文件, 在执行laravel的方法时, 所有的命令都会被预加载, 预加载就以为命令中的 `__construct()` 方法, 这个方法体执行了实例化了那个服务间的类文件
  • 测试 (证明猜想)

    1. 我把那个文件中实例化这个服务间的类给注释掉, 再加一行var_dump([6666]), 重新执行 `composer install` 后不再报错了, 同时打印我调试的值, 正常运行完成
    2. 我把那个自定义命令文件的类后面的 `extends Command` 的前面加上注释, 重新执行了测试, 不在被执行这个类了, 我看了下这个自定义类的代码,是用于数据库迁移用途的,所以就这样注释下简单的解决了每次启动服务都实例化的问题
  • 总结

    laravel中的需要注意, 自定义命令在执行composer install的时候会被扫描, 其中的 所有命令文件中的 `__construct()` 方法都会被实例化

标签: none

添加新评论