Я установил свежую Laravel 5 копию.
Моя функция detectEnvironment определяется следующим образом:
$app->detectEnvironment(function()
{
return 'local';
return getenv('APP_ENV') ?: 'production';
});
В config\local
Я создал database.php
файл:
<?php
return [
'nothing' => 'new',
];
я бегу php artisan clear-compiled
,
мой index
метод WelcomeController
определяется следующим образом:
public function index(Application $app)
{
echo $app->environment();
var_dump($app['config']['database']);
//echo $app['config']['database'];
return view('welcome');
}
Приложение было импортировано следующим образом: use Illuminate\Foundation\Application;
Результат, который я получаю:
local array(1) { ["nothing"]=> string(3) "new" }
в то время как я ожидаю, что Laravel будет каскадный файл конфигурации с производственным (по умолчанию config\database.php
файл.
Странно то, что даже если я прокомментирую строку return 'local';
беги снова php artisan clear-compiled
это показывает:
production array(1) { ["nothing"]=> string(3) "new" }
так что, кажется, всегда загружает database.php
содержимое файла (это из локальной папки) и переопределяет основной database.php
файл. Он снова работает нормально, когда я изменяю это имя файла, например, aaa.php
,
Является ли это ошибкой или, возможно, конфигурацию среды не следует хранить внутри config
каталог? Но если нет, где их хранить? Я не знаю, является ли это ошибкой или функцией, поэтому, если кто-то знает о ней больше, пожалуйста, дайте мне подсказку.
Хотя в документации для Laravel dev (5.0) есть информация, что конфигурация будет каскадной, это не так. Я протестировал его около 2 недель назад, и на данный момент кажется, что единственный способ получить разные значения для сред — это использовать файл ENV, в который вы помещаете пользовательские значения для текущей среды. Размещение настроек в каталогах не будет работать, как раньше, однако возможно, что это изменится или, возможно, уже изменилось за последние 2 недели.
Есть пакет это возвращает систему каскадных настроек обратно в Laravel 5.
Отказ от ответственности: я автор.
Для меня это выглядит как дефект в ветке Laravel 5 dev. Я смог обойти это, добавив обнаружение и настройку среды вручную. Этот код делает это.
'default' => $app->environment()=='testing'?'sqlite':'mysql',
Среду Laravel 5 легко настроить.
Я цитирую разработчика в файле readme.md его репозитория github;
phpdotenv предназначен для сред разработки и обычно должен
не будет использоваться в производстве. В производстве, фактическая среда
переменные должны быть установлены так, чтобы не было никаких накладных расходов на загрузку
Файл .env по каждому запросу. Это может быть достигнуто с помощью автоматизированного
Процесс развертывания с помощью таких инструментов, как Vagrant, Chef или Puppet, или может быть
установить вручную с помощью облачных хостов, таких как Pagodabox и Heroku.
Итак, вам нужно создать файл «.env» для каждой машины и не использовать файл «.env» на вашем рабочем сервере.