Вступ у параметри
Вступ у параметри
Ви можете визначати параметри у сервіс-контейнері, які потім можуть бути використані напряму або як частина визначень сервісу. Це може допомогти відокремити значення, які ви захочете змінювати регулярніше.
Параметри у файлах конфігурації
Використайте розділ parameters
файлу конфігурації, щоб встановити параметри:
1 2
parameters:
mailer.transport: sendmail
Ви можете посилатися на параметри де завгодно у будь-якому файлі конфігурації, оточивши
їх знаками відсотку (%
), наприклад, %mailer.transport%
. Одним з методів застосування
цього є впровадження значень у ваші сервіси. Це дозволяє вам сконфігурувати різні версії
сервісів між додатками або декілька сервісів, заснованих на одному класі, але сконфігурованих
по-різному в межах одного додатку. Ви можете впровадити вибір поштового транспорту у клас
Mailer
напряму. Але його оголошення в якості парамета спрощує зміни, замість того,
щоб повʼязувати його та ховати у визначенні сервісу:
1 2 3 4 5 6
parameters:
mailer.transport: sendmail
services:
AppBundle\Service\Mailer:
arguments: ['%mailer.transport%']
Caution
Значення між тегами parameter
у файлах конфігурації XML не усікаються.
Це означає, що наступний приклад конфігурації матиме значення
\n sendmail\n
:
1 2 3
<parameter key="mailer.transport">
sendmail
</parameter>
У деяких випадках (для констант або імен класу), це може викликати помилки. Щоб уникнути цього, ви маєте завжди вбудовувати ваші параметри наступним чином:
1
<parameter key="mailer.transport">sendmail</parameter>
Note
Якщо ви використовуєте рядок, що починається з @
або має %
в будь-якому
місці, вам потрібно екранувати його, додавши ще один @
або %
:
1 2 3 4 5 6 7
# app/config/parameters.yml
parameters:
# Це буде інтерпретовано як рядок '@securepass'
mailer_password: '@@securepass'
# Интерпретировано, как http://symfony.com/?foo=%s&bar=%d
url_pattern: 'http://symfony.com/?foo=%%s&bar=%%d'
Отримання та установка параметрів контейнера в PHP
Робота з параметрами контейнера прямолінійна за використання методів доступу контейнера для параметрів:
1 2 3 4 5 6 7 8
// перевірте, чи визначено параметр
$container->hasParameter('mailer.transport');
// отримайте значення параметра
$container->getParameter('mailer.transport');
// додайте новий параметр
$container->setParameter('mailer.transport', 'sendmail');
Caution
Використана нотація .
- це просто
угода Symfony , щоб зробити парамети легшими
для читання. Параметир є просто лінійними ключовими значеннями елементів, вони
не можуть бути організоваі у вкладений масив.
Note
Ви можете встановити параметр лише до того як було скомпільовано контейнер: не під час прогону. Щоб дізнатися більше про компіляцію контейнера, див. Компіляція контейнера.
Параметри масиву
Параметри не мають буди лінійними рядками, вони також можуть містити значення масиву.
Для формату XML вам потрібно використати атрибут type="collection"
для усіх
параметрів, які є масивами.
1 2 3 4 5 6 7 8 9 10
parameters:
my_mailer.gateways: [mail1, mail2, mail3]
my_multilang.language_fallback:
en:
- en
- fr
fr:
- fr
- en
Змінні середовища та динамічні значення
Дивіться Як встановлювати зовнішні параметри в сервіс-контейнері.
Константи як параметри
Установка PHP-констант як параметрів також підтримується. Щоб скористатися перевагами
цієї функції, звʼяжіть імʼя вашої константи з ключом параметра та визначіть тип як
constant
.
1 2 3
parameters:
global.constant.value: !php/const:GLOBAL_CONSTANT
my_class.constant.value: !php/const:My_Class::CONSTANT_NAME
Ключові слова PHP в XML
За замовчуванням, true
, false
і null
в XML конвертуються у ключові
слова PHP (true
, false
і null
, відповідно):
1 2 3 4 5 6 7
<parameters>
<parameter key="mailer.send_all_in_once">false</parameter>
</parameters>
<!-- after parsing
$container->getParameter('mailer.send_all_in_once'); // returns false
-->
Щоб відключити цю поведінку, використайте тип string
:
1 2 3 4 5 6 7
<parameters>
<parameter key="mailer.some_parameter" type="string">true</parameter>
</parameters>
<!-- after parsing
$container->getParameter('mailer.some_parameter'); // returns "true"
-->
Note
Це недоступно для YAML або PHP, так як вони вже мають вбудовану підтримку ключових слів PHP.