После обновления с 5.0 до 5.8 laravel перестал читать переменные env, если env отличается от файла .env.
Например, если у меня есть файл .env с USE_SSL=true внутри него.
env('USE_SSL') будет правдой
Но если у меня есть файл .env, указывающий на другую среду:
APP_ENV=dev
и тогда у меня будет .env.dev файл, содержащий USE_SSL=true , env('USE_SSL') будет нулевым.
composer dump-autoload и php artisan config:clear, и php artisan config:cache - не повезло. кешируется или нет, я не могу получить значение.Любые идеи были бы хорошы.
@jcHache я добавил значение, а затем кэшировал его, но я добавил его при редактировании, чтобы избежать путаницы.
В другой части той же документации указано: если вы выполняете команду config:cache в процессе развертывания, вы должны быть уверены, что вызываете функцию env только из файлов конфигурации. Откуда вы звоните env?
Я не выполняю его в развертывании
А где твой env звонок?
Я не думаю, что такой подход с цепочкой .env работает, так как в любом случае это не то, как вы должны использовать .env.
А здесь нет ответа? stackoverflow.com/questions/34420761/…






Хорошо, если ты действительно хотел это сделать,
Route::get('renderEnvChaining',function(){
$myCustomEnv = parse_ini_file(base_path(env('CUSTOM_ENV')));
return $myCustomEnv['USE_SSL']; // This will return true
});
В моем файле .env я упомянул об этом,
CUSTOM_ENV=.env.example
Теперь я по умолчанию env.example я поставил это
USE_SSL = "true" // This will return true
USE_SSL=true // This will return 1
Я только что обнаружил, что .ini и .env имеют одинаковые значения, поэтому я проанализировал файл .env как файл .ini,
Попробуйте, я никогда раньше этого не делал, пожалуйста, посоветуйтесь с другими разработчиками, прежде чем запускать это на рабочем сервере.
Некоторые причины. Во-первых, .env файлы — это не .ini файлы. Существуют различия, например, как вы указываете комментарий, поэтому использование parse_ini_file может вызвать проблемы. Во-вторых, предлагаемый вами подход не заполняет переменные среды. В-третьих, он работает только на одном рассматриваемом маршруте.
@ceejayoz Спасибо, что заставили меня ясно это понять. Хорошо, а что, если я использую этот пакет github.com/vlucas/phpdotenv для загрузки файла env, будет ли это хорошим подходом? и я знаю, что они оба разные, и они работают по-разному. Здесь я нашел хорошее решение для загрузки пользовательской среды с пакетом stackoverflow.com/a/38824174/5928015, последнее, что я должен обновить свой ответ, используя пакеты, или я должен удалить его за введение в заблуждение?
В конечном счете, я думаю, что сам вопрос ошибочен, поскольку он основан на непонимании того, как предполагается использовать .env. У каждого компьютера (локального разработчика или сервера) есть свой .env. Ваш может отличаться от моего, даже для одного и того же приложения. Решение для специфичных для разработчиков настроек — просто поместить их в основной файл .env на сервере разработки.
Да, это то, что я узнаю из документа laravel. Файл .env предназначен только для настройки дескриптора, без .env мы должны вручную записывать значения в каждый из файлов папки конфигурации, таких как database.php и т. д. Так кто-нибудь собирается закрыть этот вопрос? потому что то, что фреймворк дает по умолчанию, мы всегда должны переопределять и расширять его методы, верно?
Я добавляю это как ответ, но обратите внимание на этот не, как файл .env следует использовать в соответствии с документами laravel. Это просто способ, который мне нужно было использовать из-за некоторых ограничений, которые требовали от меня использования разных файлов конфигурации для каждой среды и загрузки их во время выполнения. Для корректного использования файла .env проверьте файл документы.
Это способ загрузки различных файлов конфигурации во время выполнения зависит от того, куда указывает APP_ENV. Я отмечаю это как ответ, так как он отвечает на этот конкретный вопрос.
.env
APP_ENV=specific_domain
.env.специфический_домен
USE_SSL=true
http/ядро.php
public function __construct(Application $app, Router $router)
{
parent::__construct($app, $router);
$app_env = explode(" = ", file($app->environmentFilePath(), FILE_IGNORE_NEW_LINES)[0])[1];
$app->loadEnvironmentFrom(".env.$app_env");
}
После кэширования конфигурации файл
.envне будет загружен, и все вызовы функцииenvбудут возвращать значениеnull: см. документ.