ファクトリはリクエストが存続するあいだにフレームワークが必要とするコアオブジェクトです。
これらは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 # ...
サポートされるファクトリの名前は次のとおりです: controller、logger、i18n、request、response、routing、storage、user、view_cacheとview_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.ymlのcharset設定が使われます。
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.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フラグを送信しようとします。
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オプションは翻訳用コンテナーの種類を定義します。
組み込みのコンテナー: XLIFF、SQLite、MySQL、と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オプションはロガーのレベルを定義します。
可能な値: EMERG、ALERT、CRIT、ERR、WARNING、NOTICE、INFOもしくはDEBUG
loggers
loggersオプションは使用するロガーのリストを定義します。
リストは匿名ロガーファクトリの配列です。
組み込みのロガークラス: sfConsoleLogger、sfFileLogger、sfNoLogger、
sfStreamLoggerとsfVarLogger
controller
sfContextアクセサー: $context->getController()
デフォルトコンフィギュレーション:
controller: class: sfFrontWebController
匿名キャッシュファクトリ
いくつかのファクトリ(view_cache、i18nとrouting)はそれぞれ設定で定義されている場合、効果のあるキャッシュオブジェクトを利用できます。
キャッシュオブジェクトの設定はすべてのファクトリと似ています。
cacheキーは匿名キャッシュファクトリを定義します。
ほかのファクトリと同じように、これはclassとparamエントリーをとります。
paramエントリーは与えられたキャッシュクラスで利用可能な任意のオプションをとります。
もっとも重要なのはprefixオプションで異なる環境/アプリケーション/プロジェクトのあいだでキャッシュを共有するもしくは分離できるようにします。
組み込みのキャッシュクラス: sfAPCCache、sfEAcceleratorCache、sfFileCache、sfMemcacheCache、sfNoCache、sfSQLiteCacheとsfXCachCache
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.