【问题标题】:Is there a way to not read .env when hitting API route?有没有办法在访问 API 路由时不读取 .env?
【发布时间】:2019-02-10 23:57:17
【问题描述】:

在 Laravel 5.5.42 中,当我设置基本 API 路由 (api.php) 并尝试访问该端点时,Laravel 似乎想要从 .ENV 读取数据。

对于示例,当我点击基本 API 路由/端点时,Laravel 会尝试从 .env 文件中读取值(例如读取会话状态服务器的值等)。我不希望它对某些 API 路由这样做。

为什么它会在不需要时尝试从 .ENV 读取会话服务器等内容?该路由不支持任何身份验证。

我感觉 Laravel 会针对每个请求启动一些内部工作。对于像这样的简单路线,我怎么能不这样做。

例如,这是我的路线:

Route::get('/something', function() {
    response('', 200)
        ->header('Content-Type', 'text/plain');
});

【问题讨论】:

  • 你使用的是什么版本的 Laravel 5?您是从早期版本升级到它还是在该版本上安装它?
  • 我不认为从.env 读取(通常通过config/ 文件)与从会话开始/读取相同。你是正确的,使用 Laravel 时每个请求都有开销,但防止这种情况可能会导致更多的问题而不是值得的。
  • @RossWilson 我使用的是 5.5.42。我已经更新了问题以包含它。我直接安装 - 没有升级。
  • @TimLewis 谢谢。您可能是对的 - 会话启动可能与从 .ENV 读取不同。我的假设是从 .ENV 读取数据是开始会话的直接结果。我已经更新了我的问题以指定不想从 .ENV 中读取。

标签: laravel laravel-5


【解决方案1】:

请求生命周期是这样的:

  • 点击 public/index.php
  • 创建应用程序
    • 注册事件/日志/路由服务提供商
  • 创建控制台和 HTTP 内核的单个实例
  • 将请求传递给内核处理
  • 确定应用程序是否已被引导
    • 如果没有,请加载引导程序

这是我们停下来的地方。此时,如果应用程序尚未启动,将执行以下操作:

$this->make(\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class)->bootstrap($this) 

这个类的bootstrap 函数是读取环境变量的地方。正如@Devon 所说,如果它被缓存,它将不会读取,如果不是,它将从这里读取。

所以我想回答你的问题,是的。你可以运行:

php artisan config:cache

并且不会在每个请求中都读取它。但是,我认为sessionenv 之间存在脱节。

答案是没有直接相关性.env 文件只是应用程序可以重复使用的变量列表——或者——用于配置应用程序的各个方面。此处理的开销非常小(在 ~1ms 和 ~500 行环境下测试)。您不应该关心这种级别的微优化。

【讨论】:

    【解决方案2】:

    配置数据不仅仅用于会话。通常,读取 .env 以将数据加载到各种配置文件中。

    缓存配置,然后配置文件和 .env 文件将不再被请求读取。

    php artisan config:cache
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 2020-08-24
      • 2017-04-20
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多