在如何掌握并創(chuàng)建新的環(huán)境一章中,你學會了如何管理你的應用程序的配置。有些時候,在你的工程代碼之外儲存證書會對你的應用程序有好處。數(shù)據(jù)庫配置就是這樣一個例子。Symfony 的服務容器的靈活性使得你很容易這么做。
Symfony 將會抓取以 SYMFONY__ 作為前綴的變量并且將其設置成為服務容器中的參數(shù)。結果的參數(shù)名稱都應用了一些轉換:
舉例來說,如果你使用 Apache,環(huán)境變量可以使用下面的 VirtualHost 配置進行設置:
<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 指令。然而,這個將會為支持環(huán)境變量設置的任何網(wǎng)頁服務器工作。
同時,為了使你的控制臺工作(那個不使用 Apache 的),你必須將這些作為 shell 變量輸出。在 Unix 系統(tǒng)下,你可以運行如下代碼:
$ export SYMFONY__DATABASE__USER=user $ export SYMFONY__DATABASE__PASSWORD=secret
既然你已經(jīng)聲明了環(huán)境變量,它將會在 PHP $_SERVER 全局變量中出現(xiàn)。之后 Symfony 將會自動將以 SYMFONY__ 為前綴的所有 $_SERVER 變量設置成服務容器中的參數(shù)。
現(xiàn)在你可以在你需要的時候隨時使用這些參數(shù)。
YAML:
doctrine:
dbal:
driver pdo_mysql
dbname: symfony_project
user: "%database.user%"
password: "%database.password%"
XML:
<!-- 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:
$container->loadFromExtension('doctrine', array(
'dbal' => array(
'driver' => 'pdo_mysql',
'dbname' => 'symfony_project',
'user' => '%database.user%',
'password' => '%database.password%',
)
));
容器也支持設置 PHP 常量作為參數(shù)。更多細節(jié)詳見常量作為參數(shù)。
imports 指令可以用來將存儲在各處的參數(shù)拉出來。輸入 PHP 文件使得你在添加容器所需要的東西時更加的靈活。下面的例子就是輸入一個名為 parameters.php 的文件。
YAML:
# app/config/config.yml
imports:
- { resource: parameters.php }
XML:
<!-- app/config/config.xml -->
<imports>
<import resource="parameters.php" />
</imports>
PHP:
// app/config/config.php
$loader->import('parameters.php');
資源文件可以有很多類型。PHP, XML, YAML, INI,同時閉包資源都支持 imports 指令。
在 parameters.php 之中,告訴了服務容器你想要設置的參數(shù)。當重要的配置文件沒有標準的格式時很有用。下面的例子包含了 Symfony 服務容器中的 Drupal 數(shù)據(jù)庫配置。
// app/config/parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);