factories.yml 設定ファイル

ファクトリはリクエストが存在しているあいだにフレームワークが必要とするコアオブジェクトです。これらのコンフィギュレーションは factories.yml 設定ファイルで変更され、sfContext オブジェクトを通してつねにアクセスできます:

// ユーザーファクトリを取得する
sfContext::getInstance()->getUser();
 

アプリケーションのメイン設定ファイルである factories.ymlapps/APP_NAME/config/ ディレクトリで見つかります。

設定ファイルの原則の章で説明したように、factories.yml ファイルでは、環境が認識されコンフィギュレーションカスケードのメカニズムがはたらき、定数を定義することができます。

factories.yml 設定ファイルには、名前つきファクトリのリストが用意されています:

---
FACTORY_1:
  # ファクトリ1の定義

FACTORY_2:
  # ファクトリ2の定義

# ...

サポートされているファクトリの名前は次のとおりです: controllerloggeri18nrequestresponseroutingstorageuserview_cacheview_cache_manager

sfContext がファクトリを初期化するとき、ファクトリオブジェクトを設定するために使うファクトリのクラス名 (class) とパラメータ (param) を得るために、sfContextfactories.yml ファイルを読み込みます:

---
FACTORY_NAME:
  class: CLASS_NAME
  param: { ARRAY OF PARAMETERS }

ファクトリをカスタマイズできることが意味するのは、symfony コアのデフォルトクラスの代わりにカスタムクラスを使うことができるということです。これらのクラスに渡すパラメータをカスタマイズすることで、これらのクラスのデフォルトのふるまいを変更することもできます。

ファクトリクラスがオートロードされないとき、file パスが定義され、ファクトリが作られる前に自動的にインクルードされます:

---
FACTORY_NAME:
  class: CLASS_NAME
  file:  ABSOLUTE_PATH_TO_FILE

factories.yml 設定ファイルは PHP ファイルとしてキャッシュされます。処理は ~sfFactoryConfigHandler~ クラスによって自動管理されます。

ファクトリ

mailer

sfContext アクセサ: $context->getMailer()

デフォルトコンフィギュレーション:

---
mailer:
  class: sfMailer
  param:
    logging:           %SF_LOGGING_ENABLED%
    charset:           %SF_CHARSET%
    delivery_strategy: realtime
    transport:
      class: Swift_SmtpTransport
      param:
        host:       localhost
        port:       25
        encryption:
        username:
        password:

test 環境のデフォルトコンフィギュレーション:

---
mailer:
  param:
    delivery_strategy: none

dev 環境のデフォルトコンフィギュレーション:

---
mailer:
  param:
    delivery_strategy: none

~charset~

charset オプションはメールメッセージに使う文字集合を定義します。デフォルトでは、settings.ymlcharset 設定が使われます。

~delivery_strategy~

delivery_strategy オプションはメーラーによってメールメッセージがどのように配信されるのかを定義します。デフォルトでは、4つの戦略を選ぶことが可能で、すべての共通ニーズに適しています:

  • realtime: メッセージはリアルタイムで送信されます。

  • single_address: メッセージは単独のアドレスに送信されます。

  • spool: メッセージはキューに保存されます。

  • none: メッセージは単に無視されます。

~delivery_address~

delivery_address オプションは、delivery_strategysingle_address にセットされているときにすべてのメッセージの受信アドレスを定義します。

~spool_class~

spool_class オプションは、delivery_strategyspool にセットされているときに使われるスプールクラスを定義します:

  • ~Swift_FileSpool~: メッセージはファイルシステムに保存されます。

  • ~Swift_DoctrineSpool~: メッセージは Doctrine モデルに保存されます。

  • ~Swift_PropelSpool~: メッセージは Propel モデルに保存されます。

スプールがインスタンス化されるとき、~spool_arguments~ オプションはコンストラクタの引数に使われます。

~spool_arguments~

spool_arguments オプションはスプールのコンストラクタの引数を定義します。組み込みのキュークラスで利用できるオプションは次のとおりです:

  • Swift_FileSpool:

    • キューディレクトリの絶対パス (メッセージはこのディレクトリに保存されます)
  • Swift_DoctrineSpool:

    • メッセージを保存する Doctrine モデル (デフォルトは MailMessage)

    • メッセージ保存に使われるカラムの名前 (デフォルトは message)

    • 送信するメッセージを読み出すために呼び出すメソッド (オプション)。このメソッドはキューオプションを引数にとります。

  • Swift_PropelSpool:

    • メッセージを保存するために使う Propel モデル (デフォルトは MailMessage)

    • メッセージ保存に使うカラムの名前 (デフォルトは message)

    • 送信するメッセージを読み出すために呼び出すメソッド (オプション)。このメソッドは現在の Criteria を引数にとります。

Doctrine スプールのコンフィギュレーションの典型例は次のとおりです:

---
# factories.yml のコンフィギュレーション
mailer:
  class: sfMailer
  param:
    delivery_strategy: spool
    spool_class:       Swift_DoctrineSpool
    spool_arguments:   [ MailMessage, message, getSpooledMessages ]

~transport~

transport オプションはメールメッセージを実際に送信するために使うトランスポートを定義します。

class 設定は Swift_Transport を実装する任意のクラスになります。デフォルトでは、3つの設定が提供されます:

  • ~Swift_SmtpTransport~: メッセージの送信に SMTP サーバーを使います。

  • ~Swift_SendmailTransport~: メッセージの送信に sendmail を使います。

  • ~Swift_MailTransport~: メッセージの送信に PHP ネイティブの mail() 関数を使います。

param 設定をセットすることでトランスポートを細かく調整できます。組み込みのトランスポートクラスと異なるパラメータについて知る必要のある情報は Swift Mailer の公式ドキュメントの 「Transport Types」 の節で網羅されています。

request

sfContext アクセサ: $context->getRequest()

デフォルトコンフィギュレーション:

---
request:
  class: sfWebRequest
  param:
    logging:           %SF_LOGGING_ENABLED%
    path_info_array:   SERVER
    path_info_key:     PATH_INFO
    relative_url_root:
    formats:
      txt:  text/plain
      js:   [application/javascript, application/x-javascript, text/javascript]
      css:  text/css
      json: [application/json, application/x-json]
      xml:  [text/xml, application/xml, application/x-xml]
      rdf:  application/rdf+xml
      atom: application/atom+xml

~path_info_array~

path_info_array オプションは情報検索に使われるグローバルな PHP 配列を定義します。コンフィギュレーションしだいではデフォルトの SERVER から ENV に変更するとよいでしょう。

~path_info_key~

path_info_key オプションは PATH_INFO の情報を見つけられるキーを定義します。

IIFR もしくは ISAPI のような rewrite モジュールが付属する IIS を使う場合、このオプションの値を HTTP_X_REWRITE_URL に変更するとよいでしょう。

~formats~

formats オプションはファイルの拡張子と Content-Type の配列です。このオプションはリクエスト URI の拡張子に合わせてレスポンスの Content-Type を自動管理するのに使われます。

~relative_url_root~

relative_url_root オプションは URL のなかのフロントコントローラより前の部分を定義します。ほとんどの場合、このオプションはフレームワークによって自動検出されるので、変更する必要はありません。

response

sfContext アクセサ: $context->getResponse()

デフォルトコンフィギュレーション:

---
response:
  class: sfWebResponse
  param:
    logging:           %SF_LOGGING_ENABLED%
    charset:           %SF_CHARSET%
    send_http_headers: true

test 環境のデフォルトコンフィギュレーション:

---
response:
  class: sfWebResponse
  param:
    send_http_headers: false

~send_http_headers~

send_http_headers オプションは、レスポンスのコンテンツに加えて HTTP レスポンスヘッダーを送信するかどうかを指定します。ヘッダーを実際に送信するのは PHP の header() 関数です。この関数が出力の後でヘッダーを送信しようとすると警告を発してくれるので、このオプションはテストの際に重宝します。

~charset~

charset オプションはレスポンスに使う文字集合を定義します。デフォルトでは、settings.ymlcharset 設定が使われます。ほとんどの場合、デフォルトで十分です。

~http_protocol~

http_protocol オプションはレスポンスに使う HTTP プロトコルのバージョンを定義します。デフォルトでは、利用可能であれば、$_SERVER['SERVER_PROTOCOL'] の値もしくは HTTP/1.0 です。

user

sfContext のアクセサ: $context->getUser()

デフォルトコンフィギュレーション:

---
user:
  class: myUser
  param:
    timeout:         1800
    logging:         %SF_LOGGING_ENABLED%
    use_flash:       true
    default_culture: %SF_DEFAULT_CULTURE%

デフォルトでは、myUser クラスは sfBasicSecurityUser を継承します。このクラスは security.yml 設定ファイルで変更できます。

~timeout~

timeout オプションはユーザー認証のタイムアウトを定義します。このオプションはセッションのタイムアウトとは関係ありません。デフォルトでは、30分間何もしていないユーザーの認証が自動的に解除されます。

このオプションを使えるのは sfBasicSecurityUser 基底クラスを継承するユーザークラスだけです。具体例として myUser生成クラスが当てはまります。

予期しないふるまいを避けるために、セッションガベージコレクタの最長有効期間 (session.gc_maxlifetime) がタイムアウトよりもはるかに長くなるように、ユーザークラスによって強制されます。

~use_flash~

use_flash オプションはフラッシュコンポーネントを有効もしくは無効にします。

~default_culture~

default_culture オプションはサイトに初めて訪問したユーザーのためにデフォルトカルチャを定義します。デフォルトでは、settings.ymldefault_culture が使われ、ほとんどの場合これで十分です。

factories.yml もしくは settings.yml の ~default_culture~ 設定を変更した場合、結果を確認するためにブラウザの Cookie を消去する必要があります。

storage

HTTP リクエストにおけるユーザーデータの一貫性を保つために、ストレージファクトリはユーザーファクトリによって使われます。

sfContext アクセサ: $context->getStorage()

デフォルトコンフィギュレーション:

---
storage:
  class: sfSessionStorage
  param:
    session_name: symfony

test 環境のデフォルトコンフィギュレーション:

---
storage:
  class: sfSessionTestStorage
  param:
    session_path: %SF_TEST_CACHE_DIR%/sessions

~auto_start~

auto_start オプションは (session_start() 関数を通して) PHP のセッション自動開始機能を有効もしくは無効にします。

~session_name~

session_name オプションはユーザーセッションを保存するために symfony によって使われる Cookie の名前を定義します。デフォルトの名前は symfony で、このことが意味するのは、すべてのアプリケーションが同じ Cookie (と対応する認証と承認) を共有するということです。

session_set_cookie_params() パラメータ

storage ファクトリは session_set_cookie_params() 関数に次のオプションの値を渡します:

  • ~session_cookie_lifetime~: セッション Cookie の有効期間。秒単位で定義されます。
  • ~session_cookie_path~: Cookie が機能するドメインのパスです。ドメインのパスに単独のスラッシュ (/) が使われます。
  • ~session_cookie_domain~: Cookie のドメインで、たとえば www.php.net です。すべてのサブドメインで Cookie が見えるようにするには、.php.net のようにドメインのプレフィックスとしてドットをつけなければなりません。
  • ~session_cookie_secure~: true にセットされている場合、Cookie はセキュアなコネクションを通してのみ送信されます。
  • ~session_cookie_httponly~: true にセットされている場合、セッション Cookie を設定する際に、PHP は httponly フラグを送信しようとします。

それぞれのオプションの説明は PHP 公式マニュアルの session_set_cookie_params() 関数のページにあります。

~session_cache_limiter~

session_cache_limiter オプションがセットされている場合、PHP の session_cache_limiter() 関数が呼び出され、オプションの値は引数に渡されます。

データベースストレージ固有のオプション

sfDatabaseSessionStorage クラスを継承するストレージを使うとき、いくつかの追加オプションが利用できます:

  • ~database~: データベースの名前 (必須)
  • ~db_table~: テーブルの名前 (必須)
  • ~db_id_col~: 主キーのカラムの名前 (デフォルトは sess_id)
  • ~db_data_col~: データカラムの名前 (デフォルトは sess_data)
  • ~db_time_col~: 時間カラムの名前 (デフォルトは sess_time)

view_cache_manager

sfContext アクセサ: $context->getViewCacheManager()

デフォルトコンフィギュレーション:

---
view_cache_manager:
  class: sfViewCacheManager
  param:
    cache_key_use_vary_headers: true
    cache_key_use_host_name:    true

cache 設定が true にセットされている場合にのみこのファクトリが作られます。

このファクトリのコンフィギュレーションの大半は view_cache ファクトリを通して変更されます。view_cache ファクトリはビューキャッシュマネージャによって使われる内部のキャッシュオブジェクトを定義します。

~cache_key_use_vary_headers~

cache_key_use_vary_headers オプションはキャッシュキーに Vary ヘッダーの部分が含まれるかどうかを指定します。実際には、vary キャッシュパラメータで指定されるように、このオプションの使い道はページキャッシュが HTTP ヘッダーに依存するかどうかを伝えることです (デフォルト: true)。

~cache_key_use_host_name~

cache_key_use_host_name オプションはキャッシュキーにホスト名の部分が含まれるかどうかを指定します。このオプションの実際の使い道は、ページキャッシュがホスト名に依存するかどうかを伝えることです (デフォルト: true)。

view_cache

sfContext アクセサ: なし (view_cache_manager ファクトリによって直接使われます)

デフォルトコンフィギュレーション:

---
view_cache:
  class: sfFileCache
  param:
    automatic_cleaning_factor: 0
    cache_dir:                 %SF_TEMPLATE_CACHE_DIR%
    lifetime:                  86400
    prefix:                    %SF_APP_DIR%/template

cache 設定が true にセットされている場合のみこのファクトリが定義されます。

view_cache ファクトリは sfCache を継承するキャッシュクラスを定義します (詳しい情報はキャッシュの節を参照)。

i18n

sfContext アクセサ: $context->getI18N()

デフォルトコンフィギュレーション:

---
i18n:
  class: sfI18N
  param:
    source:               XLIFF
    debug:                false
    untranslated_prefix:  "[T]"
    untranslated_suffix:  "[/T]"
    cache:
      class: sfFileCache
      param:
        automatic_cleaning_factor: 0
        cache_dir:                 %SF_I18N_CACHE_DIR%
        lifetime:                  31556926
        prefix:                    %SF_APP_DIR%/i18n

i18n 設定が true にセットされている場合のみこのファクトリが定義されます。

~source~

source オプションは翻訳コンテナの種類を定義します。

組み込みのコンテナ: XLIFFSQLiteMySQLgettext

~debug~

debug オプションはデバッグモードをセットします。true にセットされている場合、未翻訳のメッセージはプレフィックスとサフィックスによって飾りつけられます (下記を参照)。

~untranslated_prefix~

untranslated_prefix は未翻訳のメッセージに使われるプレフィックスを定義します。

~untranslated_suffix~

untranslated_suffix は未翻訳のメッセージに使われるサフィックスを定義します。

~cache~

cache オプションは国際化対応データのキャッシュに使われる匿名キャッシュファクトリを定義します (詳しい情報はキャッシュの節を参照)。

routing

sfContext アクセサ: $context->getRouting()

デフォルトコンフィギュレーション:

---
routing:
  class: sfPatternRouting
  param:
    load_configuration:               true
    suffix:                           ''
    default_module:                   default
    default_action:                   index
    debug:                            %SF_DEBUG%
    logging:                          %SF_LOGGING_ENABLED%
    generate_shortest_url:            false
    extra_parameters_as_query_string: false
    cache:

~variable_prefixes~

デフォルト: :

variable_prefixes オプションは、ルートパターンにおける変数のプレフィックスのリストを定義します。

~segment_separators~

デフォルト: /.

segment_separators オプションはルートの区切り文字のリストを定義します。特定のルート以外、ルーティング全体でこのオプションをオーバーライドすることはほとんどないでしょう。

~generate_shortest_url~

デフォルト: 新しいプロジェクトでは true、アップグレードしたプロジェクトでは false

true にセットされている場合、generate_shortest_url オプションはルーティングシステムに実現可能な最短ルートを生成するよう指示します。symfony 1.0 と 1.1 と後方互換性のあるルートがほしければ、false にセットします。

~extra_parameters_as_query_string~

デフォルト: 新しいプロジェクトでは true、アップグレードしたプロジェクトでは false

ルート生成に使われていないパラメータがあるとき、extra_parameters_as_query_string はルート生成に使われていないパラメータをクエリ文字列に変換します。symfony 1.0 もしくは 1.1 のふるまいに戻すのであれば、false にセットします。これらのバージョンでは、ルート生成に使われていないパラメータはルーティングシステムによって無視されるだけでした。

~cache~

デフォルト: なし

cache オプションはルーティングコンフィギュレーションとデータのキャッシュに使われる匿名キャッシュファクトリを定義します (詳しい情報はキャッシュの節を参照)。

~suffix~

デフォルト: なし

すべてのルートに使われるデフォルトのサフィックスです。このオプションは推奨されないので、もはや役に立ちません。

~load_configuration~

デフォルト: true

load_configuration オプションは routing.yml ファイルをオートロードの対象にして、パースする必要があるかどうかを決めます。symfony プロジェクト外部の symfony ルーティングシステムを使いたければ、false にセットします。

~lazy_routes_deserialize~

デフォルト: false

true にセットされている場合、lazy_routes_deserialize 設定はルーティングキャッシュの遅延デシリアライゼーションを有効にします。たくさんのルートをかかえており、マッチするルートが最初のほうにある場合、この設定はアプリケーションのパフォーマンスを改善できます。特定の状況では、パフォーマンスにわるい影響を与える可能性があるので、運用サーバーにデプロイする前に、この設定をテストすることをぜひおすすめします。

~lookup_cache_dedicated_keys~

デフォルト: false

lookup_cache_dedicated_keys 設定はルーティングキャッシュを構築する方法を決めます。false にセットされている場合、キャッシュは1つの大きな値として保存されます。true にセットされている場合、それぞれのルートに専用のキャッシュストアクラスが用意されます。この設定はパフォーマンスを最適化します。

経験則によれば、ファイルベースのキャッシュクラス (たとえば sfFileCache) を使う場合には、この設定を false に、メモリベースのキャッシュクラス (たとえば sfAPCCache) を使う場合には、true にするとよいです。

logger

sfContext アクセサ: $context->getLogger()

デフォルトコンフィギュレーション:

---
logger:
  class: sfAggregateLogger
  param:
    level: debug
    loggers:
      sf_web_debug:
        class: sfWebDebugLogger
        param:
          level: debug
          condition:       %SF_WEB_DEBUG%
          xdebug_logging:  false
          web_debug_class: sfWebDebug
      sf_file_debug:
        class: sfFileLogger
        param:
          level: debug
          file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log

prod 環境のデフォルトコンフィギュレーション:

---
logger:
  class:   sfNoLogger
  param:
    level:   err
    loggers:

sfAggregateLogger を使いたくなければ、loggers パラメータに null を指定することをお忘れなく。

このファクトリはつねに定義されていますが、ロギングが実行されるのは logging_enabled 設定が true にセットされている場合のみです。

~level~

level オプションはロガーのレベルを定義します。

利用可能な値: EMERGALERTCRITERRWARNINGNOTICEINFO もしくは DEBUG

~loggers~

loggers オプションは使用するロガーのリストを定義します。リストは匿名ロガーファクトリの配列です。

組み込みのロガークラス: sfConsoleLoggersfFileLoggersfNoLoggersfStreamLoggersfVarLogger

controller

sfContext アクセサ: $context->getController()

デフォルトコンフィギュレーション:

---
controller:
  class: sfFrontWebController

匿名キャッシュファクトリ

コンフィギュレーションのなかでキャッシュオブジェクトが定義されていれば、いくつかのファクトリ (view_cachei18nrouting) はこのファクトリを利用できます。キャッシュオブジェクトのコンフィギュレーションはすべてのファクトリと似ています。cache キーは匿名キャッシュファクトリを定義します。ほかのファクトリと同じように、このファクトリには classparam エントリが用意されています。param エントリは任意のキャッシュクラスで利用可能な任意のオプションをとります。

もっとも重要なのは prefix オプションで、異なる環境/アプリケーション/プロジェクトのあいだでキャッシュを共有するもしくは分離することができます。

組み込みのキャッシュクラス: sfAPCCachesfEAcceleratorCachesfFileCachesfMemcacheCachesfNoCachesfSQLiteCachesfXCachCache

インデックス

Document Index

関連ページリスト

Related Pages

日本語ドキュメント

Japanese Documents

リリース情報
Release Information

Symfony2 に関する情報(公式) Books on symfony