Подтвердить что ты не робот

Конфигурация Laravel 5 - окружающая среда и переопределение

Я установил новую копию 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? Но если нет, где их хранить? Я не знаю, если это ошибка или функция, поэтому, если кто-нибудь знает об этом, пожалуйста, дайте мне ключ.

4b9b3361

Ответ 1

Хотя в документации для Laravel dev (5.0) есть информация о том, что конфигурация будет каскадом, это не так. Я тестировал его примерно 2 недели назад, и кажется, что в настоящий момент единственным способом иметь разные значения для сред является использование файла ENV, в который вы помещаете пользовательские значения для текущей среды. Ввод настроек в каталоги не будет работать так, как он работал, однако возможно, что он изменится или, возможно, уже был изменен за последние 2 недели.

Ответ 2

Там пакет, который возвращает каскадную конфигурационную систему в Laravel 5.

Отказ от ответственности: я автор.

Ответ 3

Для меня это похоже на дефект в ветке Laravel 5 dev. Я смог обойтись, добавив ручную обнаружение и настройку среды. Этот код делает это.

'default' => $app->environment()=='testing'?'sqlite':'mysql',

Ответ 4

Легко настроить среду Laravel 5.

  • Откройте корневую папку приложения и найдите ".env.example",
  • Скопируйте и переименуйте в ".env",
  • Пожалуйста, поместите файл ".env" в свою среду,
  • Если вы используете GIT, убедитесь, что вы не нажимаете этот файл в репозиторий GIT. Для "полного объяснения" я пишу эту конфигурацию здесь.

Edited;

Я цитирую разработчика в его файле readme.md для репозитория github;

phpdotenv предназначен для среды разработки и обычно должен не используется в производстве. В производстве фактическая окружающая среда переменные должны быть установлены так, чтобы не было накладных расходов на загрузку .env по каждому запросу. Это может быть достигнуто с помощью автоматизированного процесс развертывания с помощью таких инструментов, как Vagrant, chef или Puppet, или может быть установить вручную с облачными узлами, такими как Pagodabox и Heroku.

Итак, вам нужно создать файл ".env" на машину и не использовать файл ".env" на вашем рабочем сервере.