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

12

Решение

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

13

Другие решения

Есть пакет это возвращает систему каскадных настроек обратно в Laravel 5.

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

7

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

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

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

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

Под редакцией;

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

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

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

0
По вопросам рекламы [email protected]