Laravel Artisan - 重新加载 .env 变量或重启框架

Laravel Artisan - reload .env variables or restart framework

我正在尝试编写一个命令作为构建项目的快速入门。该命令要求输入数据库详细信息,然后更改 .env 文件。问题是命令之后需要做一些数据库查询,但是没有重新加载 .env 变量。

我的问题是,有没有办法重新加载或覆盖 .env 变量运行时。如果没有,有没有办法调用另一个 Artisan 命令 freshly,以便框架再次启动?

在我的命令中,我尝试在我的实际命令中执行 $this->call('build:project'),但即使在第二次调用中,变量也没有重新加载。

有没有办法在不让用户手动调用多个命令的情况下实现这一点?

谢谢!

Laravel 使用从 .env 文件获取数据的配置文件。所以,你可以做的是在运行时override configuration values

config(['database.default' => 'mysql']);

我在重新加载 .env 变量时遇到了同样的问题,我用这个允许你清除配置的命令行修复了它:

php artisan config:clear

希望对您有所帮助。问候。

尝试清除缓存它对我有帮助(无法通过 ssh 进入服务器)

生产服务器上有{app route}/bootstrap/cache/config.php文件吗?删除它。

这对我有帮助

作为 OP,我正在尝试 bootstrap 通过 运行ning 控制台命令构建一个 Laravel 项目,并在过程中询问数据库凭据。

这是一个棘手的问题,我阅读的任何内容都无法修复它:重置配置、缓存、Dotenv 重新加载等...似乎一旦控制台命令/操作初始化,初始数据库连接将全部保留一直到最后。

我找到的可行解决方案是在完成数据库修改后绕过此缓存状态,方法是使用本机 shell exec 命令并将 php artisan 命令作为参数传递:

passthru('php artisan migrate');

因此,顺序为:

  1. php artisan project:build(或者你的控制台命令)
  2. 提示用户输入数据库凭据
  3. 替换 .env 文件中的值(您的搜索和替换算法)
  4. 运行 php artisan config:cache
  5. passthru('php artisan migrate'); ro 运行 你的迁移

shell_exec 会做同样的事情,但在静默模式下,而 passthru 会 return 控制台生成的输出。 https://www.php.net/manual/en/function.passthru.php

在 Laravel 8.52

上成功完成