 
                    支付宝扫一扫付款
 
                    微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
在配置Symfony(和环境)章节中,你已了解如何去管理你的程序配置。有时,存储一些“项目代码以外”的特定凭据(credentials),对你的程序是有好处的。数据库配置就是这种例子之一。Symfony服务容器的灵活性使你能够轻松实现它。
Symofny将抓取每一个前缀是SYMFONY_的环境变量,然后把它设置为服务容器的参数(parameter)。有一些转换会施加到用作结果的参数名称上:
SYMFONY__前缀会被移除;
参数名称全部小写;
双下划线(__)被替换为一个英文半角句号,因为句号在环境变量名中并非有效字符。
例如,若你使用Apache,环境变量可以使用下面的VirtualHost配置进行设定:
| 1 2 3 4 5 6 7 8 9 10 11 12 | <VirtualHost *:80>
    ServerName      Symfony
    DocumentRoot    "/path/to/symfony_2_app/web"
    DirectoryIndex  index.php index.html
    SetEnv          SYMFONY__DATABASE__USER user
    SetEnv          SYMFONY__DATABASE__PASSWORD secret
 
    <Directory "/path/to/symfony_2_app/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost> | 
上例是Apache的配置,使用SetEnv指令。然而,它却能运行在任何“支持环境变量设置”的web服务器之上。
同时,为了让你的命令行能够工作(它不使用Apache),你必须把它们导出为shell变量。在Unix系统上,你可以运行如下命令:
| 1 2 | $  export SYMFONY__DATABASE__USER=user
$  export SYMFONY__DATABASE__PASSWORD=secret | 
现在你已声明了一个环境变量,它将由PHP的$_SERVER超全局变量所呈现。Symfony接下来会自动为所有$_SERVER变量添加SYMFONY__前缀,作为服务容器的参数。
在需要时你可以随处引用这些参数:
| 1 2 3 4 5 6 | doctrine:
    dbal:
        driver:   pdo_mysql
        dbname:   symfony_project
        user:     '%database.user%'
        password: '%database.password%' | 
| 1 2 3 4 5 6 7 8 9 10 11 | <!-- xmlns:doctrine="http://symfony.com/schema/dic/doctrine" -->
<!-- xsi:schemaLocation="http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> -->
 
<doctrine:config>
    <doctrine:dbal
        driver="pdo_mysql"
        dbname="symfony_project"
        user="%database.user%"
        password="%database.password%"
    />
</doctrine:config> | 
容器也支持把PHP常量设置为参数(parameters)。参考常量参数以了解更多细节。
imports指令可以用于取得存在别处的参数。导入一个PHP文件给了你“向容器中添加任意需要内容”的灵活性。下例导入了一个名为parameters.php的文件:
| 1 2 3 | # app/config/config.yml
imports:
    - { resource: parameters.php } | 
| 1 2 3 4 | <!-- app/config/config.xml -->
<imports>
    <import resource="parameters.php" />
</imports> | 
| 1 2 | // app/config/config.php
$loader->import('parameters.php'); | 
资源文件可以是任意类型。PHP、XML、YAML、INI以及closure resources统统被imports指令所支持。
在parameters.php中,告诉服务容器你希望设置的参数。当重要配置信息并非标准格式时,这是有用的。下例是把一个Drupal数据库配置信息给包容到Symfony的服务容器中:
| 1 2 3 | // app/config/parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url); | 
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。