Дата обновления перевода 2022-01-03
Процессоры переменных окружения¶
Использование переменных окружения для конфигурации приложений Symfony - распространенная практика, чтобы сделать ваши приложения действительно динамическими.
Главная проблема переменных окружения заключается в том, что их значения могут быть
только строками, а вашему приложению могут понадобиться другие типы данных (целое
число, булево значение и т.д.). Symfony решаует эту проблему с помощью “процессоров
переменных окружения”, которые преобразуют изначальное содержание заданных переменных
окружения. Следующий пример использует процессор целых числе, чтобы преобразовать
значение переменной окружения HTTP_PORT
в целое число:
- YAML
1 2 3 4
# config/packages/framework.yaml framework: router: http_port: '%env(int:HTTP_PORT)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <framework:config> <framework:router http-port="%env(int:HTTP_PORT)%"/> </framework:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/framework.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Config\FrameworkConfig; return static function (FrameworkConfig $framework) { $framework->router() ->httpPort(env('HTTP_PORT')->int()) ; };
Встроенные процессоры переменных окружения¶
Symfony предоставляет следующие процессоры переменных окружения:
env(string:FOO)
Превращает
FOO
в строку:- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(SECRET): 'some_secret' framework: secret: '%env(string:SECRET)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(SECRET)">some_secret</parameter> </parameters> <framework:config secret="%env(string:SECRET)%"/> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/framework.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Config\FrameworkConfig; return static function (ContainerBuilder $container, FrameworkConfig $framework) { $container->setParameter('env(SECRET)', 'some_secret'); $framework->secret(env('SECRET')->string()); };
- YAML
env(bool:FOO)
Превращает
FOO
в булево значение (значенияtrue
-'true'
,'on'
,'yes'
и все числа, кроме0
и0.0
; все остальное -false
):- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(HTTP_METHOD_OVERRIDE): 'true' framework: http_method_override: '%env(bool:HTTP_METHOD_OVERRIDE)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(HTTP_METHOD_OVERRIDE)">true</parameter> </parameters> <framework:config http-method-override="%env(bool:HTTP_METHOD_OVERRIDE)%"/> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/framework.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Config\FrameworkConfig; return static function (ContainerBuilder $container, FrameworkConfig $framework) { $container->setParameter('env(HTTP_METHOD_OVERRIDE)', 'true'); $framework->httpMethodOverride(env('HTTP_METHOD_OVERRIDE')->bool()); };
- YAML
env(not:FOO)
New in version 5.3: Процессор переменных окружения
not:
был представлен в Symfony 5.3.Превращает
FOO
в булево значение (так же, как иenv(bool:...)
), но возвращает ивенртированное значение (неправильные значения возвращаются какtrue
, а правильные - какfalse
):
- YAML
1 2 3 # config/services.yaml parameters: safe_for_production: '%env(not:APP_DEBUG)%'- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!-- config/services.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="safe_for_production">%env(not:APP_DEBUG)%</parameter> </parameters> </container>- PHP
1 2 // config/services.php $container->setParameter('safe_for_production', '%env(not:APP_DEBUG)%');
env(int:FOO)
- Превращает
FOO
в целое число. env(float:FOO)
- Превращает
FOO
в плавающее значение. env(const:FOO)
Находит константное значение, именованное в
FOO
:- YAML
1 2 3 4 5 6
# config/packages/security.yaml parameters: env(HEALTH_CHECK_METHOD): 'Symfony\Component\HttpFoundation\Request::METHOD_HEAD' security: access_control: - { path: '^/health-check$', methods: '%env(const:HEALTH_CHECK_METHOD)%' }
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<!-- config/packages/security.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://symfony.com/schema/dic/security" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/security https://symfony.com/schema/dic/security/security-1.0.xsd"> <parameters> <parameter key="env(HEALTH_CHECK_METHOD)">Symfony\Component\HttpFoundation\Request::METHOD_HEAD</parameter> </parameters> <security:config> <rule path="^/health-check$" methods="%env(const:HEALTH_CHECK_METHOD)%"/> </security:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/security.php use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Config\SecurityConfig; return static function (ContainerBuilder $container, SecurityConfig $security) { $container->setParameter('env(HEALTH_CHECK_METHOD)', 'Symfony\Component\HttpFoundation\Request::METHOD_HEAD'); $security->accessControl() ->path('^/health-check$') ->methods(['%env(const:HEALTH_CHECK_METHOD)%']); };
- YAML
env(base64:FOO)
- Расшифровывает содержание
FOO
, которое является зашифрованной base64 строкой. env(json:FOO)
Расшифровывает содержание
FOO
, которое является зашифрованной JSON строкой. Возвращает либо масиив, либоnull
:- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(TRUSTED_HOSTS): '["10.0.0.1", "10.0.0.2"]' framework: trusted_hosts: '%env(json:TRUSTED_HOSTS)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(TRUSTED_HOSTS)">["10.0.0.1", "10.0.0.2"]</parameter> </parameters> <framework:config trusted-hosts="%env(json:TRUSTED_HOSTS)%"/> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/framework.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Config\FrameworkConfig; return static function (ContainerBuilder $container, FrameworkConfig $framework) { $container->setParameter('env(TRUSTED_HOSTS)', '["10.0.0.1", "10.0.0.2"]'); $framework->trustedHosts(env('TRUSTED_HOSTS')->json()); };
- YAML
env(resolve:FOO)
Если содержание
FOO
включает в себя параметры контейнера container (с синтаксисом%parameter_name%
), заменяет параметры их значениями:- YAML
1 2 3 4 5 6 7
# config/packages/sentry.yaml parameters: env(HOST): '10.0.0.1' sentry_host: '%env(HOST)%' env(SENTRY_DSN): 'http://%sentry_host%/project' sentry: dsn: '%env(resolve:SENTRY_DSN)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- config/packages/sentry.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"> <parameters> <parameter key="env(HOST)">10.0.0.1</parameter> <parameter key="sentry_host">%env(HOST)%</parameter> <parameter key="env(SENTRY_DSN)">http://%sentry_host%/project</parameter> </parameters> <sentry:config dsn="%env(resolve:SENTRY_DSN)%"/> </container>
- PHP
1 2 3 4 5 6 7
// config/packages/sentry.php $container->setParameter('env(HOST)', '10.0.0.1'); $container->setParameter('sentry_host', '%env(HOST)%'); $container->setParameter('env(SENTRY_DSN)', 'http://%sentry_host%/project'); $container->loadFromExtension('sentry', [ 'dsn' => '%env(resolve:SENTRY_DSN)%', ]);
- YAML
env(csv:FOO)
Расшифровывает содержание
FOO
, которое является зашифрованной CSV строкой:- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(TRUSTED_HOSTS): "10.0.0.1,10.0.0.2" framework: trusted_hosts: '%env(csv:TRUSTED_HOSTS)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(TRUSTED_HOSTS)">10.0.0.1,10.0.0.2</parameter> </parameters> <framework:config trusted-hosts="%env(csv:TRUSTED_HOSTS)%"/> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/framework.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Config\FrameworkConfig; return static function (ContainerBuilder $container, FrameworkConfig $framework) { $container->setParameter('env(TRUSTED_HOSTS)', '10.0.0.1,10.0.0.2'); $framework->trustedHosts(env('TRUSTED_HOSTS')->csv()); };
- YAML
env(file:FOO)
Возвращает содержание файла, путь которого является значение переменной окружения
FOO
:- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(AUTH_FILE): '../config/auth.json' google: auth: '%env(file:AUTH_FILE)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(AUTH_FILE)">../config/auth.json</parameter> </parameters> <google auth="%env(file:AUTH_FILE)%"/> </container>
- PHP
1 2 3 4 5
// config/packages/framework.php $container->setParameter('env(AUTH_FILE)', '../config/auth.json'); $container->loadFromExtension('google', [ 'auth' => '%env(file:AUTH_FILE)%', ]);
- YAML
env(require:FOO)
require()
PHP-файл, чей путь является значением переменной окруженияFOO
, и возвращает значение, которое было возвращено оттуда.- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(PHP_FILE): '../config/.runtime-evaluated.php' app: auth: '%env(require:PHP_FILE)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(PHP_FILE)">../config/.runtime-evaluated.php</parameter> </parameters> <app auth="%env(require:PHP_FILE)%"/> </container>
- PHP
1 2 3 4 5
// config/packages/framework.php $container->setParameter('env(PHP_FILE)', '../config/.runtime-evaluated.php'); $container->loadFromExtension('app', [ 'auth' => '%env(require:PHP_FILE)%', ]);
- YAML
env(trim:FOO)
Усекает содержание переменной окружения
FOO
, удаляя пробелы в начале и конце строки. Это особенно полезно в комбинации с процессоромfile
, так как он удаляет новые строки в конце файла.- YAML
1 2 3 4 5
# config/packages/framework.yaml parameters: env(AUTH_FILE): '../config/auth.json' google: auth: '%env(trim:file:AUTH_FILE)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(AUTH_FILE)">../config/auth.json</parameter> </parameters> <google auth="%env(trim:file:AUTH_FILE)%"/> </container>
- PHP
1 2 3 4 5
// config/packages/framework.php $container->setParameter('env(AUTH_FILE)', '../config/auth.json'); $container->loadFromExtension('google', [ 'auth' => '%env(trim:file:AUTH_FILE)%', ]);
- YAML
env(key:FOO:BAR)
Извлекает значение, ассоциированные с ключом
FOO
, из массива, содержание которого хранится в переменной окруженияBAR
:- YAML
1 2 3 4 5
# config/services.yaml parameters: env(SECRETS_FILE): '/opt/application/.secrets.json' database_password: '%env(key:database_password:json:file:SECRETS_FILE)%' # if SECRETS_FILE contents are: {"database_password": "secret"} it returns "secret"
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- config/services.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(SECRETS_FILE)">/opt/application/.secrets.json</parameter> <parameter key="database_password">%env(key:database_password:json:file:SECRETS_FILE)%</parameter> </parameters> </container>
- PHP
1 2 3
// config/services.php $container->setParameter('env(SECRETS_FILE)', '/opt/application/.secrets.json'); $container->setParameter('database_password', '%env(key:database_password:json:file:SECRETS_FILE)%');
- YAML
env(default:fallback_param:BAR)
Извлекает значение параметра
fallback_param
, когда переменная окруженияBAR
недоступна:- YAML
1 2 3 4 5
# config/services.yaml parameters: # if PRIVATE_KEY is not a valid file path, the content of raw_key is returned private_key: '%env(default:raw_key:file:PRIVATE_KEY)%' raw_key: '%env(PRIVATE_KEY)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- config/services.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <!-- if PRIVATE_KEY is not a valid file path, the content of raw_key is returned --> <parameter key="private_key">%env(default:raw_key:file:PRIVATE_KEY)%</parameter> <parameter key="raw_key">%env(PRIVATE_KEY)%</parameter> </parameters> </container>
- PHP
1 2 3 4 5
// config/services.php // если PRIVATE_KEY не является валидным путем файла, возвращается содержание raw_key $container->setParameter('private_key', '%env(default:raw_key:file:PRIVATE_KEY)%'); $container->setParameter('raw_key', '%env(PRIVATE_KEY)%');
Когда опущен резерный параметр (например,
env(default::API_KEY)
), возвращается значениеnull
.- YAML
env(url:FOO)
Анализирует абсолютный URL и возвращает его содержание в виде ассоциированного массива.
1 2
# .env MONGODB_URL="mongodb://db_user:[email protected]:27017/db_name"
- YAML
1 2 3 4 5 6 7 8 9 10 11
# config/packages/mongodb.yaml mongo_db_bundle: clients: default: hosts: - { host: '%env(string:key:host:url:MONGODB_URL)%', port: '%env(int:key:port:url:MONGODB_URL)%' } username: '%env(string:key:user:url:MONGODB_URL)%' password: '%env(string:key:pass:url:MONGODB_URL)%' connections: default: database_name: '%env(key:path:url:MONGODB_URL)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<!-- config/packages/mongodb.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"> <mongodb:config> <mongodb:client name="default" username="%env(string:key:user:url:MONGODB_URL)%" password="%env(string:key:pass:url:MONGODB_URL)%"> <mongodb:host host="%env(string:key:host:url:MONGODB_URL)%" port="%env(int:key:port:url:MONGODB_URL)%"/> </mongodb:client> <mongodb:connections name="default" database_name="%env(key:path:url:MONGODB_URL)%"/> </mongodb:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// config/packages/mongodb.php $container->loadFromExtension('mongodb', [ 'clients' => [ 'default' => [ 'hosts' => [ [ 'host' => '%env(string:key:host:url:MONGODB_URL)%', 'port' => '%env(int:key:port:url:MONGODB_URL)%', ], ], 'username' => '%env(string:key:user:url:MONGODB_URL)%', 'password' => '%env(string:key:pass:url:MONGODB_URL)%', ], ], 'connections' => [ 'default' => [ 'database_name' => '%env(key:path:url:MONGODB_URL)%', ], ], ]);
Caution
Для того, чтобы облегчить извлечение источника из URL, начальный
/
усекается из компонентаpath
.- YAML
env(query_string:FOO)
Анализирует часть строки запроса заданного URL, и возвращает его компоненты в виде ассоциированного массива.
1 2
# .env MONGODB_URL="mongodb://db_user:[email protected]:27017/db_name?timeout=3000"
- YAML
1 2 3 4 5 6
# config/packages/mongodb.yaml mongo_db_bundle: clients: default: # ... connectTimeoutMS: '%env(int:key:timeout:query_string:MONGODB_URL)%'
- XML
1 2 3 4 5 6 7 8 9 10 11
<!-- config/packages/mongodb.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"> <mongodb:config> <mongodb:client name="default" connectTimeoutMS="%env(int:key:timeout:query_string:MONGODB_URL)%"/> </mongodb:config> </container>
- PHP
1 2 3 4 5 6 7 8 9
// config/packages/mongodb.php $container->loadFromExtension('mongodb', [ 'clients' => [ 'default' => [ // ... 'connectTimeoutMS' => '%env(int:key:timeout:query_string:MONGODB_URL)%', ], ], ]);
- YAML
Также возможно комбинировать любое количество процессоров:
- YAML
1 2 3 4 5 6 7 8 9
# config/packages/framework.yaml parameters: env(AUTH_FILE): "%kernel.project_dir%/config/auth.json" google: # 1. получает значение переменной окружения AUTH_FILE # 2. заменяет значения любого параметра конфигурации, чтобы получить путь конфигурации # 3. получает содержание файла, хранящегося по этому пути # 4. JSON-расшифровывает содержание файла и возвращает его auth: '%env(json:file:resolve:AUTH_FILE)%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<!-- config/packages/framework.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <parameters> <parameter key="env(AUTH_FILE)">%kernel.project_dir%/config/auth.json</parameter> </parameters> <!-- 1. получает значение переменной окружения AUTH_FILE --> <!-- 2. заменяет значения любого параметра конфигурации, чтобы получить путь конфигурации --> <!-- 3. получает содержание файла, хранящегося по этому пути --> <!-- 4. JSON-расшифровывает содержание файла и возвращает его --> <google auth="%env(json:file:resolve:AUTH_FILE)%"/> </container>
- PHP
1 2 3 4 5 6 7 8 9
// config/packages/framework.php $container->setParameter('env(AUTH_FILE)', '%kernel.project_dir%/config/auth.json'); // 1. получает значение переменной окружения AUTH_FILE // 2. заменяет значения любого параметра конфигурации, чтобы получить путь конфигурации // 3. получает содержание файла, хранящегося по этому пути // 4. JSON-расшифровывает содержание файла и возвращает его $container->loadFromExtension('google', [ 'auth' => '%env(json:file:resolve:AUTH_FILE)%', ]);
Пользовательские процессоры переменных окружения¶
Также возможно добавлять собственные процессоры для переменных окружения. Для
начала, создайте класс, реализующий
EnvVarProcessorInterface
:
use Symfony\Component\DependencyInjection\EnvVarProcessorInterface;
class LowercasingEnvVarProcessor implements EnvVarProcessorInterface
{
public function getEnv(string $prefix, string $name, \Closure $getEnv)
{
$env = $getEnv($name);
return strtolower($env);
}
public static function getProvidedTypes()
{
return [
'lowercase' => 'string',
];
}
}
Чтобы включить новый процессор в приложении, зарегистрируйте его в качестве сервиса,
и тегируйте тегом container.env_var_processor
.
Если вы используете конфигурацию services.yaml по умолчанию,
это уже сделано за вас, благодаря автоконфигурации.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.