有没有办法在打API路由时不读取.env?

时间:2018-09-05 19:05:20

标签: laravel laravel-5

在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');
});

2 个答案:

答案 0 :(得分:1)

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

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

php artisan config:cache

答案 1 :(得分:1)

请求生命周期如下:

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

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

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

此类的bootstrap函数是读取环境变量的地方。正如@Devon所说,如果已缓存,它将不会读取,否则,它将从此处读取。

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

php artisan config:cache

不会在每个请求中都读取它。但是,我认为sessionenv是什么之间没有联系。

答案是没有直接关联.env文件只是应用程序可以重复使用的变量的列表-或-用于配置应用程序的各个方面。该处理的开销非常小(在〜500线环境下在〜1ms时进行了测试)。您不必担心这种微优化水平。