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
,并且修改此文件应该有效。
这是最好的方法吗?是否有一种更简单的方法,不需要修补核心框架?
答案 0 :(得分:5)
我会考虑为一个ini文件使用不同部分的不同环境。您可以使用带有prod1前缀的参数和带有相同的prod2的prod1环境:
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,也可以根据app.yml中的主机更改环境。
答案 1 :(得分: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>
如何从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