サービスコンテナで外部パラメータをセットする方法

新しい環境を作成して、使いこなす方法 の章では、アプリケーションのコンフィギュレーションの運営方法について学びました。なたのプロジェクトのコードの外部に証明書 (credentials) を格納することで恩恵があるときもあるでしょう。例えば、データベースに関する設定です。 Symfony のサービスコンテナは柔軟なので、そういったことも簡単にできます。

環境変数

Symfony は、 SYMFONY__ の接頭辞の付いたあらゆる環境変数を読み取り、サービスコンテナのパラメータとしてセットすることができます。環境変数名では、ピリオドを使用することできないため、アンダースコア2つを使用しており、 Symfony 内で、ピリオドに置換されます。

Apache を使用してるのであれば、次の VirtualHost の設定を使用して、環境変数をセットすることができます

<VirtualHost *:80>
    ServerName      Symfony2
    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/my_symfony_2_app/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

Note

上記の例は、 SetEnv ディレクティブを使用して Apache の設定をしています。環境変数のセットを支援する全てのウェブサーバであれば、このように使用することができます。

また、 Apache からではなく、コンソールから使用できるようにするために、シェル変数としてこれらの設定をエクスポートする必要があります。 Unix の場合であれば、次を実行してください。

export SYMFONY__DATABASE__USER=user
export SYMFONY__DATABASE__PASSWORD=secret

これで環境変数を宣言したので、環境変数は、 PHP のグローバル変数 $_SERVER に入ります。そして Symfony は、自動的に $_SERVER 変数を SYMFONY__ の接頭辞を付けてサービスコンテナのパラメータとしてセットします。

これで必要なときに、これらのパラメータを参照することができます。

  • YAML
    doctrine:
        dbal:
            driver    pdo_mysql
            dbname:   symfony2_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="symfony2_projet"
            user="%database.user%"
            password="%database.password%"
        />
    </doctrine:config>
    
  • PHP
    $container->loadFromExtension('doctrine', array('dbal' => array(
        'driver'   => 'pdo_mysql',
        'dbname'   => 'symfony2_project',
        'user'     => '%database.user%',
        'password' => '%database.password%',
    ));
    

定数

コンテナは、 PHP の定数もパラメータとしてセットできます。この機能のアドバンテージを享受するには、定数の名前をパラメータキーとしてマップし、 constant としてそのタイプを定義します。

<?xml version="1.0" encoding="UTF-8"?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>

    <parameters>
        <parameter key="global.constant.value" type="constant">GLOBAL_CONSTANT</parameter>
        <parameter key="my_class.constant.value" type="constant">My_Class::CONSTANT_NAME</parameter>
    </parameters>
</container>

Note

これは XML のコンフィギュレーションのみで動作します。 XML を使用して いなければ 、次のようにこの機能のアドバンテージを享受するための XML をインポートするだけです。

// app/config/config.yml
imports:
    - { resource: parameters.xml }

その他のコンフィギュレーション

imports ディレクティブは、他の場所で格納されたパラメータを参照することができます。 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');
    

Note

リソースファイルは、 PHP, XML, YAML, INI, そしてクロージャリソースなどたくさんの種類を使用することができ、全て imports ディレクティブでサポートしています。

parameters.php では、サービスコンテナにセットしたいパラメータを指定します。非標準なフォーマットのコンフィギュレーションをインポートする際に便利です。下記の例では、 Drupal のデータベースの設定を Symfony のサービスコンテナにインクルードしています。

// app/config/parameters.php

include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);

このページのコンテンツ

前のドキュメント

PdoSessionStorage を使用してデータベースにセッションを格納する方法

次のドキュメント

PHP をテンプレートエンジンとして使う

ソース



クイックリンク

コメントリスト


ご質問や翻訳不備等お気軽にコメントください。


現在、翻訳が古くなっている箇所が多くあります。1箇所、1行などほんの少量でもかまいませんので、ドキュメント翻訳にご協力いただける方を募集しています。日本 Symfony ユーザー会メーリングリストまでご連絡ください。