Laravel 如何在 .env 上定义文件位置?

Bil*_*hia 4 php laravel

我有一个.json要定义的文件.env。我怎么做 ?我的 json 文件在(laravel root folder)/json_google/api_key.json. 我试过了,GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION=/json_google/api_key.json但不起作用..

Ste*_*fan 6

Laravel 有很多辅助函数来解析路径。例如 base_path() 在您的情况下。你会在这里找到所有的助手:vendor/laravel/framework/src/Illuminate/Foundation/helpers.php

base_path(env('GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION');
Run Code Online (Sandbox Code Playgroud)

但是,我会设置完整路径而不是相对路径。否则,您的应用程序必须知道它相对于(laravel 根目录或应用程序路径,...)应该是什么并考虑到这一点,这会违背将文件位置放在代码库之外的目的,因为它使更难将它移动到其他地方。

由于 .env 文件是每个部署的,因此设置完整路径没有问题。

  • 这实际上是正确的答案。base_path 是一个 Laravel 辅助函数,它返回应用程序根目录的路径。所以在我的 .env 文件中我有: GOOGLE_CLOUD_KEY_FILENAME=gcs_credentials.json 然后在我的 config/filesystems.php 我有 'key_file' => base_path(env('GOOGLE_CLOUD_KEY_FILENAME')) (2认同)

Sun*_*shi 6

您应该使用常量文件使用 .env 变量。

.env file

GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION=/json_google/api_key.json
Run Code Online (Sandbox Code Playgroud)

现在在 config/constatns.php 设置

return [
       'STORAGE_GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION' => env("GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION", ""),
];
Run Code Online (Sandbox Code Playgroud)

获取json文件路径

Config::get('constants.STORAGE_GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION')
Run Code Online (Sandbox Code Playgroud)