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

时间:2016-10-31 16:19:07

标签: php laravel artisan

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

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

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

php artisan config:clear

希望有所帮助。问候。

答案 2 :(得分:0)

尝试清除缓存对我有帮助(无法SSH到服务器)

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

这对我有帮助

答案 3 :(得分:0)

作为 OP,我试图通过运行控制台命令并在过程中间询问数据库凭据来引导 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'); 运行您的迁移

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

在 Laravel 8.52 上成功完成