Управление окружениями - одна из сложных задач, которую должны решать разработчики при создании и развертывании приложений. Laravel позволяет довольно просто задать ((док4:configuration#среда==конфигурацию для конкретного окружения)). Настройка учётных данных различных баз данных с помощью этого метода чрезвычайно проста и делает развертывание лёгким. Однако делая проект общедоступным или с открытым исходным кодом (например, на GitHub), вы не хотите показывать всему миру учётные данные вашей рабочей системы. Многие рабочие настройки задают какую-либо переменную среды для определения окружения приложения, такие как %%(t)RAILS_ENV="production"%% или %%(t)LARAVEL_ENV="staging"%%. Такие переменные среды являются отличным решением для того, чтобы иметь специфичные для экземпляра значения таких вещей, как API-ключи. Загвоздка этого решения в том, что оно требует вмешательства сис-админа, когда вы хотите добавить новую информацию - как для новых очередей Iron MQ, который вы только что добавили в проект. К счастью для PHP-разработчиков ((http://vancelucas.com/==Ванс Лукас)) создал библиотеку ((https://github.com/vlucas/phpdotenv==PHP dotenv)), которая может загружать эти переменные из файла %%(t).env%%. **Не забудьте добавить %%(t).env%% в ваш %%(t).gitignore%% или другую VCS-ignoring конфигурацию, иначе ваши рабочие учётные данные будут по прежнему доступны. Если вы захотите добавить какой-то шаблонный файл, то я рекомендую %%(t).env.example%%, который показывает, какие переменные надо определить.** ==Использование dotenv с Laravel== Библиотека **dotenv** доступна для установки через composer, поэтому процесс установки должен быть знаком для большинства из вас. Выполните следующую команду, чтобы добавить библиотеку в качестве зависимости в ваше Laravel-приложение. %%(sh) composer require vlucas/phpdotenv --prefer-dist %% ===Загрузка dotenv=== Так как переменные, определенные в нашем %%(t).env%% файле будут использоваться в разных местах нашего приложения, мы хотим убедиться, что он загружается как можно раньше в процессе работы нашего приложения, поэтому загрузка будет происходить в директории %%(t)app/start%% Laravel-приложения. Директория %%(t)app/start%% содержит ((док4:lifecycle#Старт-файлы==стартовые файлы)), которые загружаются при запуске Laravel. У нас есть на выбор несколько вариантов загрузки переменных среды. Первый - включение кода в файл %%(t)global.php%%. При этом переменные среды будут загружаться для **каждого** окружения, в котором вы запускаете ваше приложение. Но я хочу запускать его только в рабочей (production) среде. Благодаря Laravel я могу создать файл %%(t){environment}.php%% в %%(t)app/start%%, и он будет загружаться при использовании этого окружения, поэтому я создам %%(t)production.php%%. Используйте любой подходящий для вас метод/файл, код будет одинаковым. В стартовом файле настройка начинается с команды библиотеке **dotenv** загрузить файл %%(t).env%% с указанием директории, в которой он находится. %% Dotenv::load(base_path()); %% Здесь я говорю **dotenv** загрузить файл из корневой директории моего Laravel-приложения. Вы точно также можете положить его куда-либо ещё, только убедитесь, что передаёте путь к директории в качестве параметра метода %%load%%. Далее я хочу убедиться, что некоторые переменные доступны в файле %%(t).env%%. %% Dotenv::required(array('DB_HOST', 'DB_DATABASE', 'DB_USERNAME', 'DB_PASSWORD')); %% Этот вызов проверит, что все эти переменные загружены. Иначе возникнет %%RuntimeException%%. ===Использование переменных среды=== Как видите, я использовал dotenv для загрузки переменных для моего подключения к БД. Получение этих переменных не отличается от получения других переменных среды и сервера в PHP. %% $DB_NAME = getenv('DB_NAME'); $DB_NAME = $_ENV['DB_NAME']; $DB_NAME = $_SERVER['DB_NAME']; %% Все три метода будут работать, но я предпочитаю и рекомендую использовать первый, так вы не будете обращаться к ((phpdoc:language.variables.superglobals==суперглобальным переменным)) напрямую. Теперь я могу изменить мой рабочий файл %%(t)app/config/database.php%%, чтобы загружать мои учётные данные из переменных среды. %% 'connections' => array( 'mysql' => array( 'driver' => 'mysql', 'host' => getenv('DB_HOST'), 'database' => getenv('DB_DATABASE'), 'username' => getenv('DB_USERNAME'), 'password' => getenv('DB_PASSWORD'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), ), %% Чисто, настраиваемо, легко читаемо и безопасно. Используя эту библиотеку, вы можете сделать исходный код вашего приложения общедоступным, не беспокоясь, что учётные данные вашей системы будут открыты. Узнать больше о библиотеке можно из ((https://github.com/vlucas/phpdotenv==документации phpdotenv)), а о конфигурации среды - из ((док4:configuration документации Laravel)). ===Обновление 13.02.2014=== Я только что обнаружил, что Тэйлор встроил загрузку %%(t).env%% файла в ядро. Laravel будет автоматически загружать файл %%(t).env.{environment}.php%%, добавленный в корень вашего приложения, почти так же, как это делает **dotenv**. Забегая вперед, этот метод должен быть предпочтительнее для загрузки переменных среды, но принципы **dotenv** всё еще применимы и могут быть использованы и в других проектах не на Laravel.