Конфигурация Symfony
Понимание окружений Symfony
По умолчанию есть три окружения с возможностью добавить дополнительные: dev, prod и test. Все окружения используют один и тот же код, но имеют разные конфигурации.
Например, в окружении dev все инструменты отладки включены. Тогда как в окружении prod такого нет, потому что приложение должно быть оптимизировано для повышения производительности.
Изменяя значение переменной окружения APP_ENV можно переключаться с одного окружения на другое.
Переменная APP_ENV может быть задана с помощью "настоящих" переменных окружения в терминале:
export APP_ENV=dev
Но вместо этого определите их в файле .env
Источник: https://symfony.com/doc/6.4/the-fast-track/ru/5-debug.html
Symfony - это на самом деле просто набор маршрутов и сервисов. Файлы в config/packages настраивают эти сервисы.
Например, где писать файлы журналов или каковы имя и пароль базы данных.
В среде разработки Symfony использует набор конфигураций, который... хорошо... отлично подходит для разработки: большие ошибки, регистрируйте все и показывайте мне панель инструментов веб-отладки. Среда prod использует набор настроек, оптимизированных для повышения скорости, регистрирует только ошибки и скрывает техническую информацию на страницах ошибок.
Некоторые пакеты загружаются только в определенных средах. Например, WebServerBundle загружается только в среде разработки
Symfony Profiler требуется только в процессе разработки, не нужно устанавливать его в продакшен-окружении. Поэтому по умолчанию Symfony автоматически устанавливает его только для окружений dev и test
src/Kernel.php подгружает файлы из config/* исходя из переменной окружения
Обычно рекомендуется сохранять переменные среды в файле .env, чтобы другие разработчики могли их видеть и устанавливать для них реальные значения
Наряду с этими двумя файлами, есть также менее часто используемые .env.test и .env.prod. Они загружаются только в среде test и prod соответственно.
Файлы конфигурации
Приложения Symfony настраиваются с помощью файлов, хранящихся в каталоге config/, который по умолчанию имеет следующую структуру:
your-project/
├─ config/
│ ├─ packages/
│ ├─ routes/
│ ├─ bundles.php
│ ├─ preload.php
│ ├─ reference.php
│ ├─ routes.yaml
│ └─ services.yaml
Файл routes.yaml определяет конфигурацию маршрутизации; Файл services.yaml настраивает сервисы контейнера сервисов; Файл bundles.php включает/отключает пакеты в вашем приложении; Файл preload.php определяет классы для предварительной загрузки с помощью OPcache; Файл reference.php автоматически генерируется Symfony и содержит определения, которые улучшают автодополнение в IDE и статический анализ при использовании PHP в качестве формата конфигурации; В каталоге config/packages/ хранится конфигурация каждого пакета, установленного в вашем приложении; В каталоге config/routes/ хранится конфигурация маршрутизации, загружаемая установленными пакетами (например, framework.yaml).Пакеты (в Symfony они называются «бандлами», а в других проектах — «плагинами» или «модулями») добавляют в ваши проекты готовые к использованию функции.
При использовании Symfony Flex, который по умолчанию включен в приложениях Symfony, пакеты автоматически обновляют файл bundles.php и создают новые файлы в config/packages/ во время установки
Чтобы узнать обо всех доступных параметрах конфигурации, ознакомьтесь с Справочником по конфигурации Symfony
Источник: https://symfony.com/doc/current/configuration.html#configuration-files
./bin/console config:dump-reference
./bin/console config:dump-reference DebugBundle
YAML и PHP
В файлах конфигурации может использоваться два формата YAML или PHP
При установке пакетов по умолчанию используется YAML, поскольку он лаконичен и очень удобен для чтения, не все IDE поддерживают автодополнение и проверку
Подробнее о синтаксисе YAML:
https://symfony.com/doc/current/reference/formats/yaml.html
Импорт файлов конфигурации
Symfony загружает файлы конфигурации с помощью компонента Config
https://symfony.com/doc/current/components/config.html
config/services.yaml
imports:
- { resource: 'legacy_config.php' }
....
...
Иногда одно и то же значение конфигурации используется в нескольких файлах конфигурации. Вместо того чтобы повторять его, вы можете определить его как «параметр» — то есть значение конфигурации, которое можно использовать повторно. По соглашению параметры определяются под ключом parameters:
# config/services.yaml
parameters:
# the parameter name is an arbitrary string (the 'app.' prefix is recommended
# to better differentiate your parameters from Symfony parameters).
app.admin_email: 'something@example.com'
...
..
После определения вы можете ссылаться на значение этого параметра из любого другого файла конфигурации, используя специальный синтаксис: заключите имя параметра в два % (например, %app.admin_email%):
config/packages/some_package.yaml
some_package:
# any string surrounded by two % is replaced by that parameter value
email_address: '%app.admin_email%'
Сама Symfony определяет несколько параметров, в том числе связанные с конфигурацией ядра (например, kernel.project_dir, kernel.debug), а некоторые пакеты при установке добавляют собственные параметры в ваш config/services.yaml
Источник: https://symfony.com/doc/current/configuration.html#configuration-parameters
Конфигурационные среды
При запуске приложения Symfony загружает файлы конфигурации в следующем порядке (последние файлы могут переопределять значения, заданные в предыдущих):
Файлы в config/packages/*.
файлы в config/packages/
config/services.
config/services_
Вы также можете задать параметры для разных сред в одном файле конфигурации, используя специальное ключевое слово when:
# config/packages/webpack_encore.yaml
webpack_encore:
# ...
output_path: '%kernel.project_dir%/public/build'
strict_mode: true
cache: false
# cache is enabled only in the "prod" environment
when@prod:
webpack_encore:
cache: true
# disable strict mode only in the "test" environment
when@test:
webpack_encore:
strict_mode: false
# YAML syntax allows you to reuse contents using "anchors" (&some_name) and "aliases" (*some_name).
# In this example, 'test' configuration uses the exact same configuration as in 'prod'
when@prod: &webpack_prod
webpack_encore:
# ...
when@test: *webpack_prod
Источник: https://symfony.com/doc/current/configuration.html#selecting-the-active-environment
Выбор активной среды
В приложениях Symfony есть файл .env в корневом каталоге проекта. Этот файл используется для определения значений переменных среды.
Например, чтобы запустить приложение в рабочей среде:
# .env (or .env.local)
APP_ENV=prod
Это значение используется как для веб-страниц, так и для консольных команд. Однако вы можете переопределить его для команд, указав значение APP_ENV перед их выполнением:
APP_ENV=prod php bin/console command_name






