Symfony2: Как я могу использовать разные параметры (.ini) для каждого имени хоста? - PullRequest
4 голосов
/ 01 марта 2012

Symfony содержит параметры конфигурации в /app/config/parameters.ini.

Я хотел бы использовать различные наборы параметров в зависимости от имени хоста.Первоначально имя хоста будет определять базу данных для использования, но может расширяться и охватывать больше.

Я бы предпочел, чтобы параметры для хоста сохранялись в отдельном файле, чтобы упростить их программную генерацию.

Концептуально я хотел бы сохранить параметры конфигурации следующим образом:

/app/config/parameters.ini
/app/config/foo.example.com.parameters.ini
/app/config/bar.example.com.parameters.ini

Я вижу, что на /app/config/parameters.ini есть ссылка в \Sensio\Bundle\DistributionBundle\Controller\ConfigurationController и что изменение этого файла должно работать.

Это лучший подход?Есть ли более простой подход, который не требует исправления базовой структуры?

Ответы [ 2 ]

5 голосов
/ 02 марта 2012

Если ваши параметры зависят от хоста, я думаю, вы бы предпочли управлять ими с веб-сервера, а не из конфигурации проекта Symfony, которая должна быть общей для всех экземпляров ...

Вот способЧтобы определить некоторые параметры в конфигурации Apache:

<VirtualHost *:80>

    ServerName      Symfony2
    DocumentRoot    "/path/to/symfony_2_app/web"
    DirectoryIndex  index.php index.html
    SetEnv          SYMFONY__DATABASE__HOST 192.168.10.10
    SetEnv          SYMFONY__DATABASE__USER user
    SetEnv          SYMFONY__DATABASE__PASSWORD secret

    <Directory "/path/to/symfony_2_app/web">
        AllowOverride All
        Allow from All
    </Directory>

</VirtualHost>

Как получить к ним доступ из файла конфигурации YAML:

doctrine:
    dbal:
        driver    pdo_mysql
        dbname:   symfony2_project
        host:     %database.host%
        user:     %database.user%
        password: %database.password%

Больше информации здесь: http://symfony.com/doc/current/cookbook/configuration/external_parameters.html

5 голосов
/ 02 марта 2012

Я бы подумал о разных средах, которые используют разные части для одного INI-файла.Вы можете иметь среду prod1, используя параметры с префиксом prod1 и prod2 с одинаковыми:

parameters.ini:

[parameters]
  prod1_database_driver = pdo_mysql
  prod1_database_host = 127.0.0.1

  # ...

  prod2_database_driver = pdo_mysql
  prod2_database_host = localhost

Они оба используют конфигурацию prod.yml, но перезаписывают материал, который выхотите прочитать из parameters.ini:

config_prod1.yml:

imports:
    - { resource: config_prod.yml }

// .. overwrite stuff here

Таким образом, вы также можете обойти проблему кеширования, поскольку у вас уже есть кеш для каждой среды.

Чтобы разделить их, создайте и используйте app_prod1.php и app_prod2.php так же, как в среде dev, или измените среду в зависимости от хоста в вашем app.yml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...