【问题标题】:Changing env values via controller in laravel通过 laravel 中的控制器更改环境值
【发布时间】:2019-06-17 19:54:29
【问题描述】:

有什么方法可以改变我在 laravel 控制器中的 .env 文件值?

我找到了this answer,但它返回了

未定义的属性: App\Http\Controllers\Admin\PerformanceController::$laravel

代码

$path = base_path('.env');
$key = false;

if (file_exists($path)) {
  file_put_contents($path, str_replace(
    'APP_KEY='.$this->laravel['config']['app.key'], 'APP_DEBUG='.$key, file_get_contents($path)
   ));
}

我希望在我的管理面板中有选项来更改调试模式的真假,就像我们在控制器中使用工匠命令一样,例如 Artisan::call('down')Artisan::call('up') 之类的东西。

更新

现在我有了这个代码

$path = base_path('.env');
$key = 'true';

if (file_exists($path)) {
  file_put_contents($path, str_replace(
    'APP_DEBUG='.config('app.debug'), 'APP_DEBUG='.$key, file_get_contents($path)
  ));
}

此代码确实有效,但问题是它不会删除旧值。

之前

APP_DEBUG=false

之后

APP_DEBUG=truefalse
or
APP_DEBUG=falsefalse

有什么想法吗?

【问题讨论】:

标签: php laravel environment-variables


【解决方案1】:

更改 .env 配置不是一个好主意。取而代之的是,在您想要更改 APP_KEY 的地方使用此代码。

确保你没有缓存你的配置

config(['app.key' => 'YOUR_NEW_KEY']);

【讨论】:

  • 在这种情况下,我应该将 env 值留空?
  • 不,只要您使用这部分代码,它将替换 config/app.php 的默认配置。当您不使用此代码时,app.php 使用 .env 值来填充其值。
  • 这就是我需要替换 env 文件值的原因,因为 laravel 使用它们作为优先级,而且这段代码也没有改变我的 config/app.php 中的任何内容。
  • 我得到了你想要的,你可以做一些我之前没有测试过的事情。为您的应用程序创建新的中间件并将其放在 app/http/kernel.php 类的 $middleware 属性的顶部。在 handle() 上,设置您的新配置。请在测试后告诉我它是否有用。它非常接近您的应用程序的入口点
【解决方案2】:

而不是使用 $this->laravel['config']['app.key'] 试试config('app.key')

【讨论】:

  • 好的,这不会返回错误,但是有一个奇怪的问题,当我使用 config('app.key') 时,它会将 env 文件中的 APP_KEY 更改为 APP_DEBUG,但是当我使用 config('app.debug') 时它不会什么都不做。
  • 因为您告诉您的代码找到APP_KEY 并替换为APP_DEBUG。将APP_KEY 更改为APP_DEBUG
  • 现在我有这个 'APP_DEBUG='.config('app.debug'), 'APP_DEBUG='.$key, file_get_contents($path) 但没有在 env 文件中进行更改
  • 您能进一步解释一下吗?为什么你认为这可以解决问题?
【解决方案3】:

使用这个 DotenvEditor::setKey('APP_KEY', 'new_value')->save();

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 2019-04-01
    • 2015-07-26
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多