Конфігурація Symfony
Дата оновлення перекладу 2022-12-12
Конфігурація Symfony
Файли конфігурації
Додатки Symfony сконфігуровані з файлами, що зберігаються в
каталозі config/
, який за замовчуванням має наступну структуру:
1 2 3 4 5 6 7
your-project/
├─ config/
│ ├─ packages/
│ ├─ bundles.php
│ ├─ routes.yaml
│ └─ services.yaml
├─ ...
Файл routes.yaml
визначає конфігурацію маршрутизації;
файл services.yaml
конфігурує сервіси сервіс-контейнеру;
файл bundles.php
вмикає/вимикає пакети у вашому додатку.
Ви будете в основному працювати в каталозі config/packages/
. Цей каталог зберігає
конфігурацію кожного пакету, який встановлено у вашому додатку. Пакети (які також
називаються "плагіни/модулі" в інших проектах) додають готові до використання функції
у ваші проекти.
При використанні Symfony Flex , який в додаткаї Symfony ввімкнено
за замовчуванням, пакети оновлюють файл bundles.php
та створюють нові файли в
config/packages/
автоматично під час установки. Наприклад, це файл за замовчуванням,
який створено пакетом "API Platform":
1 2 3 4
# config/packages/api_platform.yaml
api_platform:
mapping:
paths: ['%kernel.project_dir%/src/Entity']
Розділення конфігурації на безліч маленьких файлів лякає деяких новачків в Symfony. Однак ви швидко до них звикнете і вам рідко коли необхідно буде змінювати ці файли після установки пакету.
Tip
Щоб дізнатися все про доступні опції конфігурації, подивіться
довідник конфігурації Symfony або виконайте
команду config:dump-reference
.
Формати конфігурації
На відміну від інших фреймворків, Symfony не змушує вас використовувати конкретний формат для конфігурації додатку. Symfony дозволяє вам обирати між YAML, XML та PHP, і по всій документації Symfony, всі приклади конфігурації будуть продемонстровані в цих трьох форматах.
Між форматами немає практичної різниці. Насправді, Symfony трансформує та кешує їх всі в PHP перед запуском додатку, так що між ними навіть немає різниці у продуктивності.
YAML використовується за замовчуванням при установці пакетів так як він лаконічний та дуже читаний. Ось основні переваги та недоліки кожного формату:
- YAML: простий, чистий та читаний, але не всі IDE підтримують автозаповнення та валідацію для нього. Дізнайтеся про синтаксіс YAML ;
- XML: автозаповнюється/валідується більшістю IDE та нативно аналізується PHP, але інколи генерує конфігурацію, яка вважається надто перевантаженою. Вивчіть синтаксис XML;
- PHP: дуже потужний та дозволяє вам створювати динамічну конфігурацію з масивами або ConfigBuilder .
Note
За замовчуванням, Symfony завантажує файли конфігурації, визначені у форматах YAML
та PHP. Якщо ви визначаєте конфігурацію у форматі XML, оновіть файл src/Kernel.php
,
щоб додати підтримку для розширення файлу .xml
.
6.1
Автоматичне завантаження файлів конфігурації PHP було представлено в Symfony 6.1.
Імпорт файлів конфігурації
Symfony завантажує файли конфігурації з використанням компонента Config, який надає просунуті функції, такі як імпорт інших файлів конфігурації, навіть якщо вони використовують інший формат:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
# config/services.yaml
imports:
- { resource: 'legacy_config.php' }
# глобальні вирази також підтримують завантаження декількох файлів
- { resource: '/etc/myapp/*.yaml' }
# ignore_errors: not_found тихо видаляє помилки у випадку, якщо завантажений файл не існує
- { resource: 'my_config_file.xml', ignore_errors: not_found }
# ignore_errors: true тихо видаляє всі помилки (включно з невірним кодом та не знайдено)
- { resource: 'my_other_config_file.xml', ignore_errors: true }
# ...
Параметри конфігурації
Інколи одне і те саме значення конфігурації використовується в декількох файлах конфігурації.
Замість його повторення, ви можете визначити його як "параметр", що є чимось на кшталт повторно
використовуваного значення конфігурації. За згодою, параметри визначаються під ключем
parameters
в файлі config/services.yaml
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# config/services.yaml
parameters:
# ім'я параметру - довільний рядок (рекомендовано префікс 'app.'
# для кращої диференціації ваших параметрів від параметрів Symfony).
app.admin_email: 'something@example.com'
# булеві параметри
app.enable_v2_protocol: true
# параметри масиву/колекції
app.supported_locales: ['en', 'es', 'fr']
# параметри бінарного змісту (закодуйте його з допомогою base64_encode())
app.some_parameter: !!binary VGhpcyBpcyBhIEJlbGwgY2hhciAH
# PHP-константи в якості значень параметру
app.some_constant: !php/const GLOBAL_CONSTANT
app.another_constant: !php/const App\Entity\BlogPost::MAX_ITEMS
# ...
Caution
При використанні XML-конфігурації, значення між тегами <parameter>
не обрізаються. Це означає, що значення наступного параметру буде
'\n something@example.com\n'
:
1 2 3
<parameter key="app.admin_email">
something@example.com
</parameter>
Коли він буде визначений, ви можете послатися на значення цього параметру з
будь-якого іншого файлу конфігурації, використовуючи спеціальний синтаксис:
оберніть ім'я параметру в два %
(наприклад, %app.admin_email%
):
- YAML
- XML
- PHP
1 2 3 4 5 6
# config/packages/some_package.yaml
some_package:
# будь-який рядок, оточений двома %, замінюється цим значенням параметру
email_address: '%app.admin_email%'
# ...
Note
Якщо якесь значення параметру включає в себе символ %
, вам необхідно
екранувати його, додавши ще один %
, щоб Symfony не сприйняла його в якості
посилання на ім'я параметру:
- YAML
- XML
- PHP
1 2 3 4
# config/services.yaml
parameters:
# Аналізується як 'https://symfony.com/?foo=%s&bar=%d'
url_pattern: 'https://symfony.com/?foo=%%s&bar=%%d'
Дата обновления перевода 2023-01-20
Note
В связи с тем, как разрешаются параметры, вы не можете использовать их для построения путей в импорте динамически. Это означает, что что-то вроде этого работать не будет:
- YAML
- XML
- PHP
1 2 3
# config/services.yaml
imports:
- { resource: '%kernel.project_dir%/somefile.yaml' }
Параметри конфігурації дуже розповсюджені в додатках Symfony. Деякі пакети навіть
визначають свої власні параметри (наприклад, при встановленні пакету перекладів, в
файл config/services.yaml
додається новий параметр locale
).
See also
Пізніше в цій статті ви можете прочитати як отримувати параметри конфігурації в контролерах та сервісах .
Середовища конфігурації
У вас є лише один застосунок, але розумієте ви це, чи ні, вам необхідно, щоб він поводив себе по-різному за різних обставин:
- Під час розробки, вам необхідно вести логи усього і мати гарні інструменти налагодження;
- Після запуску у виробництво, вам необхідно, щоб той же застосунок було оптимізовано для швидкості і вело логи тільки для помилок.
Файли, що зберігаються в config/packages/
, використовуються Symfony для конфігурації
сервісів додатку. Іншими словами, ви можете змінити поведінку
додатку, змінивши те, які файли конфігурації завантажуються. В цьому полягає ідея
середовищ конфігурації Symfony.
Типовий застосунок Symfony починається з трьох середовищ: dev
(для локальної
розробки), prod
(для виробничих серверів) та test
(для
автоматизованих тестів). При запуску додатку, Symfony завантажує
файли конфігурації в цьому порядку (останні файли можуть перевизначити значення,
які були встановлені в попередніх):
config/packages/*.yaml
(а також файли*.xml
та*.php
);config/packages/<environment-name>/*.yaml
(а також файли*.xml
та*.php
);config/services.yaml
(а також файлиservices.xml
таservices.php
);config/services_<environment-name>.yaml
(а також файлиservices_<environment-name>.xml
таservices_<environment-name>.php
).
Візьмемо пакет framework
, встановлений за замовчуванням, в якості прикладу:
- Спочатку завантажується
config/packages/framework.yaml
у всіх середовищах та конфігурує фреймворк з деякими опціями; - В середовищі prod не буде встановлено нічого додатково, так як відсутній файл
config/packages/prod/framework.yaml
; - В середовищі dev, також відсутній файл (
config/packages/dev/framework.yaml
не існує). - В середовищі test, файл
config/packages/test/framework.yaml
завантажується для перевизначення деяких з налаштувань, що були раніше сконфігуровані вconfig/packages/framework.yaml
.
В реальності, кожне середовище відрізняється від інших лише трошки. Це означає, що
всі середовища мають спільну базу конфігурації, яка розташовує файли напряму в
каталозі config/packages/
.
Tip
Ви також можете визначити опції для різних середовищ в одному файлі
конфігурації, використовуючи спеціальне ключове слово when
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# config/packages/webpack_encore.yaml
webpack_encore:
# ...
output_path: '%kernel.project_dir%/public/build'
strict_mode: true
cache: false
# кеш включено лише у середовищі "prod"
when@prod:
webpack_encore:
cache: true
# відключити суворий режим лише у середовищі "test"
when@test:
webpack_encore:
strict_mode: false
# синтаксис YAML дозволяє повторно використовувати зміст, використовуючи "якорі" (&some_name) та "псевдоніми" (*some_name).
# У цьому прикладі, конфігурація 'test' використовує точно таку ж конфігурацію, як і в 'prod'
when@prod: &webpack_prod
webpack_encore:
# ...
when@test: *webpack_prod
See also
Див. також метод configureContainer()
класу Kernel,
щоб дізнатися все про порядок завантаження файлів конфігурації.
Вибір активного середовища
Додатки Symfony мають файл під назвою .env
, який знаходиться в кореневому
каталозі проекту. Цей файл використовується для визначення значення змінних
середовища, та детально пояснюється далі в цій статті.
Відкрийте файл .env
(а краще файл .env.local
, якщо ви його створювали), та
відредагуйте значення змінної APP_ENV
, щоб змінити середовище, в якому працює
застосунок. Наприклад, запустіть застосунок у виробництві:
1 2
# .env (або .env.local)
APP_ENV=prod
Це значення використовується як для веб-команд, так і для консольних. Однак, ви
можете перевизначити його для команд, встановивши значення APP_ENV
до їх запуску:
1 2 3 4 5
# Використовуйте середовище, визначене в файлі .env
$ php bin/console command_name
# Ігноруйте файл .env та виконайте цю команду у виробництві
$ APP_ENV=prod php bin/console command_name
Створення нового середовища
Трьох середовищ наданих Symfony за замовчуванням достатньо для більшості проектів, але
ви також можете визначати власні середовища. Наприклад, ось як ви можете визначити середовище
staging
, де клієнт може тестувати проект до його запуску у виробництво:
- Створіть каталог конфігурації з тим же іменем, що і у середовища (в даному
випадку,
config/packages/staging/
); - Додайте необхідні файли конфігурації в
config/packages/staging/
, щоб визначити поведінку нового середовища. Symfony завантажує файлиconfig/packages/*.yaml
першими, тому вам необхідно сконфігурувати лише різницю в цих файлах; - Оберіть середовище
staging
, використовуючи варіант середовищаAPP_ENV
, як пояснювалося у попередньому розділі.
Tip
Середовища часто схожі одне на одне, тому ви можете використовувати
символьні посилання між каталогами config/packages/<environment-name>/
,
щоб повторно використовувати одну й ту саму конфігурацію.
Замість створення нових середовищ, ви можете використовувати змінні середовища, як
пояснюється у наступному розділі. Таким чином ви можете використовувати однакові
додаток та середовище (наприклад, prod
), але змінити його поведінку завдяки
конфігурації, заснованій на зміннних середовища (наприклад, щоб запустити додаток
в інших сценаріях: постановці, контролю якості, рецензуванні клієнтом тощо).
Конфігурація, заснована на змінних середовища
Використання змінних середовища (або скорочено "env vars") - це розповсюджена практика для конфігурації опцій, які залежать від того, де запускається застосунок (наприклад, ідентифікаційні дані бази даних зазвичай відрізняються у виробництві та на вашій локальній машині). Якщо значення чутливі, ви навіть можете закодувати їх як секретні.
Ви можете послатися на змінні середовища, використовуючи спеціальний синтаксіс
%env(ENV_VAR_NAME)%
. Значення цих опцій дозволяється під час виконання (лише
один раз за запит, щоб не вплинути на этих опций разрешаются во время выполнения
(только единожды за запрос, чтобы не повлиять на продуктивність).
Цей приклад демонструж, як ви можете сконфігурувати з'єднання бази даних, використовуючи змінну середовища:
- YAML
- XML
- PHP
1 2 3 4 5 6
# config/packages/doctrine.yaml
doctrine:
dbal:
# за згодою, імена змінних середовищ завжди використовують верхній регістр
url: '%env(resolve:DATABASE_URL)%'
# ...
See also
Значення змінних середовища можуть бути лише рядками, але Symfony має деякі процесори env var, щоб трансформувати їхній зміст (наприклад, перетворити значення рядку в ціле число).
Щоб визначити значення будь-якої змінної середовища, у вас є декілька варіантів:
- Додати значення до файлу .env ;
- Закодувати значення як секрет ;
- Встановити значення як реальну змінну середовища в вашій оболонці бо веб-сервері.
Tip
Деякі хостінги - як SymfonyCloud - пропонують прості у виробництві утіліти для роботи з env var
Note
Деякі функції конфігурації несумісні зі змінними середовища. Наприклад, визначення
деяких параметрів контейнера залежно від умов, засновуючись на існуванні іншої опції
конфігурації. При використанні змінної середоовища, опція конфігурації завжди існує,
так як її значення буде null
, якщо повʼязана змінна середовища не визначена.
Caution
Майте на увазі, що скидання змісту змінних $_SERVER
та $_ENV
або виведення
змісту phpinfo()
відобразить значення змінних середовища, оголюючи чутливу
інформацію на кшталт ідентифікаційних даних бази даних.
Значення змінних середовища також розкриваються у веб-інтерфейсі профілювальника Symfony. На практиці це не має бути проблемою, так як веб-профільувальник ніколи не має бути увімкнений у виробництві.
Конфігурація змінних середовища у файлах .env
Замість визначення змінних середовища у вашій оболонці або веб-сервері, Symfony
надає зручний спосіб визначити їх в файлі .env
(починається з крапки), що знаходиться
в корені вашого проекту.
Файл .env
читається та аналізується при кожному запиті і його змінні середовища
додаються до PHP-змінних $_ENV
та $_SERVER
. Всі існуючі змінні середовища
ніколи не перевизначаються значеннями, визначеними в .env
, тому ви можете їх
комбінувати.
Наприклад, щоб визначити змінні середовища DATABASE_URL
, продемонстровані раніше в цій
статті, ви можете додати:
1 2
# .env
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"
Цей файл має бути надісланий у ваше сховище, і (у зв'язку з цим фактом) має містити лище значення "за замовчуванням", які підохдять для локальної розробки. Цей файл не має містити значень виробництва.
На додаток до ваших власних змінних середовища, цей файл .env
також містить змінні
середовища, визначені сторонніми пакетами, що встановлені в вашому додатку (вони автоматично
додаються Symfony Flex при установці пакетів).
Tip
Так як файл .env
читається та парсується за кожним запитом, вам не потрібно
очищувати кеш Symfony або перезавантажувати PHP контейнер, якщо ви використовуєте
Docker.
Синтаксис файлу .env
Додавайте коментарі з префіксом #
:
1 2 3
# повноваження бази даних
DB_USER=root
DB_PASS=pass # це секретний пароль
Використовуйте змінні середовища в значеннях, додаючи до них префікс $
:
1 2
DB_USER=root
DB_PASS=${DB_USER}pass # додайте користувача в якості префіксу пароля
Caution
Порядок важливий, коли деякі зі змінних середовища залежать від значення інших змінних
середовища. У прикладі вище, DB_PASS
повиен бути визначений після DB_USER
. Більш
того, якщо ви визначаєте декілька файлів .env
та ставите DB_PASS
першим, його
значення залежатиме від значення DB_USER
, визначеного в інших файлах, замість значення,
визначеного у цьому файлі.
Визначте значення за замовчуванням у випадку, якщо змінна середовища не встановлена:
1 2
DB_USER=
DB_PASS=${DB_USER:-root}pass # результати в DB_PASS=rootpass
Вбудуйте команди через $()
(не підтримується у Windows):
1
START_TIME=$(date)
Caution
Використання $()
може не працювати в залежності від вашої оболонки.
Tip
Так як файл .env
- звичайний скрипт оболонки, ви можете source
його
у ваших власних скриптах оболонки:
1
$ source .env
Перевизначення значень середовища через .env.local
Якщо вам потрібно перевизначити значення середовища (наприклад, на інше значення на
вашій локальній машині), ви можете зробити це в файлі .env.local
:
1 2
# .env.local
DATABASE_URL="mysql://root:@127.0.0.1:3306/my_database_name"
Цей файл має бути проігнорований git і не має бути відправлений до вашого сховища.
Декілька інших файлів .env
доступні для установки змінних середовища лише у
правильних ситуаціях:
.env
: визначає значення за замовчуванням для змінних середовища, які необхідні додатку;.env.local
: перевизначає значення за замовчуванням для всіх середовищ, але лише на машині, що містить цей файл. Цей файл не має бути відправлений у сховище, він ігнорується в середовищіtest
(так як тести мають виробляти однакові результати для всіх);.env.<environment>
(наприклад,.env.test
): перевизначає змінні середовища лише для одного середовища, але для всіх машин (ці файли відправляються);.env.<environment>.local
(наприклад,.env.test.local
): визначає змінні середовища, які відносяться до конкретної машини, перевизначаючи їх лише для одного середовища. Схоже на.env.local
, але перевизначення застосовується лише до одного середовища.
Справжні змінні середовища завжди виграють у тих, які створені будь-яким файлом .env
.
Файли .env
та .env.<environment>
не повинні бути відправлені в сховище, так як
вони однакові для всіх розробників та машин. Однак, файли env, які закінчуються на
.local
(.env.local
та .env.<environment>.local
) не мають бути відправлені,
так як їх будете використовувати лише ви. Насправді, файл .gitignore
, який постачається
з Symfony, запобігає їхньому відправленню.
Конфігурація змінних середовища у виробництві
У виробництві, файли .env
також аналізуються та завантажуються по кожному запиту. Тому
найпростіший спосіб визначити змінні середовища - розгорнути файл .env.local
на вашому
виробничому сервері(ах) з вашими значеннями виробництва.
Для покращення продуктивності, ви можете за бажанням виконати команду dump-env
(доступна в Symfony Flex 1.2 та пізніше):
1 2
# парсує ВСІ файли .env та скидає їх фінальні значення в .env.local.php
$ composer dump-env prod
Після виконання цієї команди, Symfony завантажить файл .env.local.php
, щоб
отримати змінні середовища, і не буде витрачати час, аналізуючи файли .env
.
Кодування змінних середовища (секрети)
Замість визначення реальної змінної середовища, або її додавання в файл .env
,
якщо значення змінної чутливе (наприклад, ключ API або пароль БД), ви можете закодувати
значення, використовуючи систему управління секретами.
Перелік змінних середовища
Використовуйте команду debug:dotenv
, щоб розуміти, як Symfony аналізує різні файли
.env
, щоб встановити значення кожної змінної середовища:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
$ php bin/console debug:dotenv
Dotenv змінні та файли
======================
Проскановані файли (в порядку зниження пріорітету)
--------------------------------------------------
* ⨯ .env.local.php
* ⨯ .env.dev.local
* ✓ .env.dev
* ⨯ .env.local
* ✓ .env
Змінні
------
------------ ---------- ---------- ------
Змінна Значення .env.dev .env
------------ ---------- ---------- ------
FOO BAR n/a BAR
ALICE BOB BOB bob
------------ ---------- ---------- ------
# шукати конкретну змінну, що передає своє повне або часткове імʼя в якості аргументу
$ php bin/console debug:dotenv foo
6.2
Опція передачі імен змінних до debug:dotenv
була представлена в Symfony 6.2.
Незалежно від того, як ви встановлюєте змінні середовища, ви можете побачити повний перелік з їх значеннями, запустивши:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$ php bin/console debug:container --env-vars
---------------- -------------------------- ---------------------------------------------
Ім'я Значення за замочуванням Реальне значення value
---------------- -------------------------- ---------------------------------------------
APP_SECRET n/a "471a62e2d601a8952deb186e44186cb3"
FOO "[1, "2.5", 3]" n/a
BAR null n/a
---------------- -------------------------- ---------------------------------------------
# ви також можете відфільтрувати список env vars за іменем:
$ php bin/console debug:container --env-vars foo
# виконайте цю команду, щоб показати всі деталі для конкретної env var:
$ php bin/console debug:container --env-var=FOO
Доступ до параметрів конфігурації
Контролери та сервіси можуть отримати доступ до всіх параметрів конфігуацрії. Це включає в себе як параметри, визначені вами , так і параметри, створені пакетами. Виконайте наступну команду, щоб побачити всі параметри, які існують у вашому додатку:
1
$ php bin/console debug:container --parameters
У контролерах, що розширюються з AbstractController ,
використовуйте хелпер getParameter()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// src/Controller/UserController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class UserController extends AbstractController
{
// ...
public function index(): Response
{
$projectDir = $this->getParameter('kernel.project_dir');
$adminEmail = $this->getParameter('app.admin_email');
// ...
}
}
В сервісах та контролерах, які не розширюються з AbstractController
, впровадьте
параметри в якості аргументів їх конструкторів. Ви маєте впровадити їх чітко, тому що
автоматичне впровадження сервісів не працює для
параметрів:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
# config/services.yaml
parameters:
app.contents_dir: '...'
services:
App\Service\MessageGenerator:
arguments:
$contentsDir: '%app.contents_dir%'
Якщо ви будете вроваджувати одні й ті самі параметри знов і знов, використовуйте
замість цього опцію services._defaults.bind
. Аргументи, визначені в цій опції,
впроваджуються автоматично кожного разу, коли конструктор сервісу або дія контролера
визначає аргумент з точно таким же іменем. Наприклад, щоб впроваджувати значення
параметра kernel.project_dir , кожний раз,
коли сервіс/контролер визначає аргумень $projectDir
, використовуйте це:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
# config/services.yaml
services:
_defaults:
bind:
# передайте це значення будь-якому аргументу $projectDir для будь-якого сервісу,
# створеного в цьому файлі (включно з аргументами контролера)
$projectDir: '%kernel.project_dir%'
# ...
See also
Прочитайте статтю про об'єднання аргументів за іменем та/або типом , щоб дізнатися більше про цю потужну функцію.
Нарешті, якщо якомусь сервісу необхідний доступ до багатьох параметрів, замість впровадження кожного з них окремо, ви можете впровадити всі параметри додатку одночасно, додавши підказки при введені коду до будь-якого з аргументів конструктора з ContainerBagInterface:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// src/Service/MessageGenerator.php
namespace App\Service;
// ...
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
class MessageGenerator
{
private $params;
public function __construct(ContainerBagInterface $params)
{
$this->params = $params;
}
public function someMethod()
{
// отримайте будь-який параметр контейнеру з $this->params, який зберігає їх всі
$sender = $this->params->get('mailer_sender');
// ...
}
}
Використання PHP ConfigBuilders
Написання PHP-конфігурації інколи буває складним, тому що у вас виходять великі вкладені масиви, і у вас немає допомоги а автозаповнюванні з вашого улюбленого IDE. Це можна вирішити з допомогою "ConfigBuilders". Це об'єкти, які допоможуть вам будувати ці масиви.
Symfony генерує класи ConfigBuilder автоматично в
каталозі будови ядра для всіх пакетів,
встановлених у вашому додатку. За згодою, вони всі живуть в просторі імен
Symfony\Config
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// config/packages/security.php
use Symfony\Config\SecurityConfig;
return static function (SecurityConfig $security) {
$security->firewall('main')
->pattern('^/*')
->lazy(true)
->anonymous();
$security
->roleHierarchy('ROLE_ADMIN', ['ROLE_USER'])
->roleHierarchy('ROLE_SUPER_ADMIN', ['ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH'])
->accessControl()
->path('^/user')
->role('ROLE_USER');
$security->accessControl(['path' => '^/admin', 'roles' => 'ROLE_ADMIN']);
};
Note
Тільки кореневі класи в просторі імен Symfony\Config
є ConfigBuilders. Вкладені
конфігурації (наприклад,
) є звичайними PHP
об'єктами, які не впроваджуються автоматично під час їх використання в якості типу
аргументу.
Не зупиняйтесь!
Вітаємо! Ви впоралися з основами Symfony. Далі, дізнайтеся про кожну частину Symfony окремо, слідуючи посібникам. Подивіться:
- Форми
- Бази даних та Doctrine ORM
- Сервіс-контейнер
- Security
- Відправлення листів за допомогою Mailer
- Логування
І всі інші теми, пов'язані з конфігурацією:
- Как организовать файлы конфигурации
- Зміни в .env від листопада 2018 року та як оновитися
- Процесори змінних середовища
- Процессоры переменных окружения
- Як встановлювати зовнішні параметри в сервіс-контейнері
- Розуміння того, як працюють фронт-контролер, ядро та середовища разом
- Побудова власного фреймворку з MicroKernelTrait
- Як створити додаток Symfony з декількома ядрами
- Як перевизначити структуру каталогів Symfony за замовчуванням
- Як зробити чутливу інформацію секретною
- Використання параметрів у класі впровадження залежностей