SymfonyWorld Online 2021 Winter Edition December 9 – 10, 2021 100% Online 25 talks and 10 workshops
Caution: You are browsing the legacy symfony 1.x part of this website.

factories.yml設定ファイル

1.2
Symfony version
1.4
Language

ファクトリはリクエストが存続するあいだにフレームワークが必要とするコアオブジェクトです。 これらはfactories.yml設定ファイルで設定されsfContextオブジェクトを通して常にアクセス可能です:

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

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

はじめの章で説明したように、factories.ymlファイルは環境を認識しコンフィギュレーションカスケードのメカニズムが有効になり、定数を格納することができます。

factories.yml設定ファイルは名前つきのファクトリのリストを格納します:

FACTORY_1:
  # definition of factory 1
 
FACTORY_2:
  # definition of factory 2
 
# ...

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

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

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

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

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

FACTORY_NAME:
  class: CLASS_NAME
  file:  ABSOLUTE_PATH_TO_FILE

note

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

ファクトリ

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を自動管理するためにsymfonyによって使われます。

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%

note

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

timeout

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

sfBasicSecurityUser基底クラスを継承するユーザークラスのみがこの設定を使います。 これはmyUserクラスが生成される例が当てはまります。

note

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

use_flash

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

default_culture

default_cultureオプションはサイトに始めて訪問したユーザーのためにデフォルトのcultureを定義します。 デフォルトでは、settings.ymlからのdefault_cultureが使用されるたいていの場合これで十分です。

caution

factories.ymlもしくはsettings.ymldefault_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フラグを送信しようとします。

note

それぞれのオプションの説明はsession_set_cookie_params()関数の説明はPHPの公式サイトに説明に由来しています。

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

caution

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

ビューキャッシュマネージャーの設定はparamキーを含みません。 この設定はview_cacheファクトリを通して行われます。 これはビューキャッシュマネージャーによって使われる内部のキャッシュオブジェクトを定義します。

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

caution

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

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

i18n

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

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

i18n:
  class: sfI18N
  param:
    source:               XLIFF
    debug:                off
    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

caution

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

source

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

組み込みのコンテナー: XLIFFSQLiteMySQL、とgettext

debug

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

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:            true
    extra_parameters_as_query_string: true
    cache:
      class: sfFileCache
      param:
        automatic_cleaning_factor: 0
        cache_dir:                 %SF_CONFIG_CACHE_DIR%/routing
        lifetime:                  31556926
        prefix:                    %SF_APP_DIR%/routing

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プロジェクトではない外部のルーティングシステムを使いたい場合falseにセットします。

lazy_routes_deserialize

デフォルト: false

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

caution

symfony 1.2.7とそれ以降でのみこの設定は利用できます。

lookup_cache_dedicated_keys

デフォルト: false

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

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

caution

symfony 1.2.7とそれ以降でのみこの設定は利用可能です。

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:  true
          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: ~

caution

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

level

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

可能な値: EMERGALERTCRITERRWARNINGNOTICEINFOもしくはDEBUG

loggers

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

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

controller

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

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

controller:
  class: sfFrontWebController

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

いくつかのファクトリ(view_cachei18nrouting)はそれぞれ設定で定義されている場合、効果のあるキャッシュオブジェクトを利用できます。 キャッシュオブジェクトの設定はすべてのファクトリと似ています。 cacheキーは匿名キャッシュファクトリを定義します。 ほかのファクトリと同じように、これはclassparamエントリーをとります。 paramエントリーは与えられたキャッシュクラスで利用可能な任意のオプションをとります。

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

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