为什么Artisan在执行时命令启动服务提供商

时间:2020-11-06 20:44:42

标签: laravel laravel-artisan

首先让我描述一下我的结构。在我的工作中,我们使用Laravel 8,OpenServer作为每个程序员的本地Web服务器,远程环境(通过PHPStorm sftp传输从本地文件夹中获取代码)以及在这些远程环境上运行的MS SQL和Redis。

因此,我们在数据库中也有一部分应用程序配置,这就是为什么我们创建ConfigServiceProvider来检查该配置是否存在于Redis中的原因。如果它不存在,我们从数据库中将其取出,将其放入Redis中,并在config()帮助器中设置此配置。如果存在,我们只需将其从Redis中拉出并将其设置为config(),以便我们可以在应用程序中的任何位置访问这些值。

此后,我们为应用程序创建了一些组件(基本上是一些静态类,其中包含一些业务逻辑),而对于整个应用程序,它们中的某些组件只应实例化一次,因此我们在实例化它们的地方也创建了ComponentsServiceProvider。显然,此服务提供程序应在ConfigServiceProvider之后启动,因为我们需要对实例化组件内部db中的值使用config()帮助程序。

所以,我的问题是,当我使用任何工匠命令(例如php artisan cache:clear)时,它从组件中抛出了异常。经过一番调查,结果发现在某些函数中,我使用了Carbon库,该库解析来自config(db_config.some_date)辅助程序的日期,由于某些原因,该日期不返回值(或者可能返回一些垃圾,不幸的是,我无法对其进行调试) ),解析失败。好吧,很明显,工匠命令就像在浏览器中打开应用程序一样引导整个应用程序,对吗?当我只是在浏览器中打开它时,一切都很好,并且像超级按钮一样工作,但是当运行artisan命令时,我会收到此类错误。我固定了它们,只是在使用config()帮助器的任何地方添加了默认值。但是由于启动过程,我也遇到了另一个错误-在.env中,我们为Redis主机设置了localhost,因为我们将代码转移到了远程环境,而代码Redis主机显然是localhost,但没有针对我们的本地环境。因此,当我运行artisan命令时,它也对我大喊:它无法建立Redis连接(当然,您不能,虚拟)。我通过在本地安装redis来解决此问题(甚至不使用它,仅是为了解决问题,这让我很难过)。

我的问题是,为什么工匠命令需要启动服务提供商才能进行诸如清除缓存之类的操作?为什么没有启动应用程序服务就无法清除必要的缓存文件夹?我可以以某种方式更改它吗? 我最近从旧的CakePHP切换到Laravel,所以也许我缺少对经验丰富的laravel程序员显而易见的东西?

0 个答案:

没有答案