.. index::
single: Environments; External Parameters
サービスコンテナで外部パラメータをセットする方法
================================================
:doc:`/cookbook/configuration/environments` の章では、アプリケーションのコンフィギュレーションの運営方法について学びました。なたのプロジェクトのコードの外部に証明書 (credentials) を格納することで恩恵があるときもあるでしょう。例えば、データベースに関する設定です。 Symfony のサービスコンテナは柔軟なので、そういったことも簡単にできます。
環境変数
--------
Symfony は、 ``SYMFONY__`` の接頭辞の付いたあらゆる環境変数を読み取り、サービスコンテナのパラメータとしてセットすることができます。環境変数名では、ピリオドを使用することできないため、アンダースコア2つを使用しており、 Symfony 内で、ピリオドに置換されます。
Apache を使用してるのであれば、次の ``VirtualHost`` の設定を使用して、環境変数をセットすることができます
.. code-block:: apache
ServerName Symfony2
DocumentRoot "/path/to/symfony_2_app/web"
DirectoryIndex index.php index.html
SetEnv SYMFONY__DATABASE__USER user
SetEnv SYMFONY__DATABASE__PASSWORD secret
AllowOverride All
Allow from All
.. note::
上記の例は、 `SetEnv` ディレクティブを使用して Apache の設定をしています。環境変数のセットを支援する全てのウェブサーバであれば、このように使用することができます。
また、 Apache からではなく、コンソールから使用できるようにするために、シェル変数としてこれらの設定をエクスポートする必要があります。 Unix の場合であれば、次を実行してください。
.. code-block:: bash
export SYMFONY__DATABASE__USER=user
export SYMFONY__DATABASE__PASSWORD=secret
これで環境変数を宣言したので、環境変数は、 PHP のグローバル変数 ``$_SERVER`` に入ります。そして Symfony は、自動的に ``$_SERVER`` 変数を ``SYMFONY__`` の接頭辞を付けてサービスコンテナのパラメータとしてセットします。
これで必要なときに、これらのパラメータを参照することができます。
.. configuration-block::
.. code-block:: yaml
doctrine:
dbal:
driver pdo_mysql
dbname: symfony2_project
user: %database.user%
password: %database.password%
.. code-block:: xml
.. code-block:: php
$container->loadFromExtension('doctrine', array('dbal' => array(
'driver' => 'pdo_mysql',
'dbname' => 'symfony2_project',
'user' => '%database.user%',
'password' => '%database.password%',
));
定数
----
コンテナは、 PHP の定数もパラメータとしてセットできます。この機能のアドバンテージを享受するには、定数の名前をパラメータキーとしてマップし、 ``constant`` としてそのタイプを定義します。
.. code-block:: xml
GLOBAL_CONSTANT
My_Class::CONSTANT_NAME
.. note::
これは XML のコンフィギュレーションのみで動作します。 XML を使用して *いなければ* 、次のようにこの機能のアドバンテージを享受するための XML をインポートするだけです。
.. code-block:: yaml
// app/config/config.yml
imports:
- { resource: parameters.xml }
その他のコンフィギュレーション
------------------------------
``imports`` ディレクティブは、他の場所で格納されたパラメータを参照することができます。 PHP ファイルをインポートすることができるので、コンテナの中で必要になったもの全てを加えることができ、柔軟です。次の例では、 ``parameters.php`` という名前のファイルをインポートいています。
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
imports:
- { resource: parameters.php }
.. code-block:: xml
.. code-block:: php
// app/config/config.php
$loader->import('parameters.php');
.. note::
リソースファイルは、 PHP, XML, YAML, INI, そしてクロージャリソースなどたくさんの種類を使用することができ、全て ``imports`` ディレクティブでサポートしています。
``parameters.php`` では、サービスコンテナにセットしたいパラメータを指定します。非標準なフォーマットのコンフィギュレーションをインポートする際に便利です。下記の例では、 Drupal のデータベースの設定を Symfony のサービスコンテナにインクルードしています。
.. code-block:: php
// app/config/parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);
.. _`SetEnv`: http://httpd.apache.org/docs/current/env.html
.. 2011/11/28 ganchiku c58e7a35072cd8ce6b711dff2acb740b2aef4cbe