Symfony2:如何为每个主机名使用不同的参数(.ini)?

Jon*_*ram 4 symfony

Symfony保存配置参数/app/config/parameters.ini.

我想根据主机名使用不同的参数集.最初,主机名将确定要使用的数据库,但可能会扩展到更多.

我希望每个主机的参数存储在一个单独的文件中,以便以编程方式生成.

从概念上讲,我想存储像这样的配置参数:

/app/config/parameters.ini
/app/config/foo.example.com.parameters.ini
/app/config/bar.example.com.parameters.ini
Run Code Online (Sandbox Code Playgroud)

我看到它/app/config/parameters.ini被引用,\Sensio\Bundle\DistributionBundle\Controller\ConfigurationController并且修改此文件应该有效.

这是最好的方法吗?是否有一种更简单的方法,不需要修补核心框架?

Sgo*_*kes 5

我会考虑为一个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
Run Code Online (Sandbox Code Playgroud)

他们都使用prod.yml配置,但覆盖了你想从parameters.ini读取的东西:

config_prod1.yml:

imports:
    - { resource: config_prod.yml }

// .. overwrite stuff here
Run Code Online (Sandbox Code Playgroud)

这样您就可以解决缓存问题,因为您已经拥有每个环境的缓存.

要分离这两者,可以像创建开发环境一样创建和使用app_prod1.php和app_prod2.php,也可以根据app.yml中的主机更改环境.


Alt*_*PHP 5

如果您的参数取决于主机,我想您更愿意从Web服务器管理它们,而不是从必须在所有实例之间共享的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>
Run Code Online (Sandbox Code Playgroud)

如何从YAML配置文件中访问它们:

doctrine:
    dbal:
        driver    pdo_mysql
        dbname:   symfony2_project
        host:     %database.host%
        user:     %database.user%
        password: %database.password%
Run Code Online (Sandbox Code Playgroud)

更多信息:http://symfony.com/doc/current/cookbook/configuration/external_parameters.html