ファクトリはリクエストが存続しているあいだに symfony フレームワークによって必要とされるコアオブジェクトです。これらのコンフィギュレーションは factories.yml ファイルのなかで変更することが可能で、sfContext オブジェクトを通じてつねにアクセスできます。
// ユーザーファクトリを取得します sfContext::getInstance()->getUser();
アプリケーションの factories.yml ファイルは apps/APP_NAME/config/ ディレクトリに配置されています。
設定ファイルの原則の章で述べたように、factories.yml ファイルでは、環境が認識され、コンフィギュレーションカスケードのメカニズムがはたらいており、定数を定義することができます。
factories.yml ファイルには、名前つきファクトリのリストが用意されています。
FACTORY_1: # ファクトリ1の定義 FACTORY_2: # ファクトリ2の定義 # ...
サポートされているファクトリは次のとおりです。
controller、logger、i18n、request、response、routing、storage、
user、view_cache と view_cache_manager
sfContext オブジェクトはファクトリを初期化するとき、factories.yml ファイルを読み込み、ファクトリオブジェクトを設定するために使うファクトリのクラス名 (class) とパラメータ (param) の値を得ます。
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 クラスにゆだねられます。
ファクトリ
-
auto_startdatabasedb_tabledb_id_coldb_data_coldb_time_colsession_cache_limitersession_cookie_domainsession_cookie_httponlysession_cookie_lifetimesession_cookie_pathsession_cookie_securesession_name
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.yml ファイルの charset 設定が使われます。
delivery_strategy
delivery_strategy オプションはメーラーによるメールメッセージの配信方法を定義します。デフォルトでは、4つのストラテジを選ぶことが可能で、すべての共通ニーズに適しています。
realtime: メッセージはリアルタイムで送信されます。single_address: メッセージは単独のアドレスに送信されます。spool: メッセージはキューに保存されます。none: メッセージは単に無視されます。
delivery_address
delivery_address オプションは delivery_strategy オプションに single_address がセットされている場合にすべてのメッセージの受信アドレスを定義します。
spool_class
spool_class オプションは delivery_strategy オプションに spool がセットされている場合に使われるスプールクラスを定義します。
Swift_FileSpool: メッセージはファイルシステムに保存されます。Swift_DoctrineSpool: メッセージは Doctrine モデルに保存されます。Swift_PropelSpool: メッセージは Propel モデルに保存されます。
note
スプールのインスタンスが生成されるとき、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 設定を変更することで、トランスポートを細かく調整できます。組み込みのトランスポートクラスと各種パラメータについては、SwiftMailer の公式ドキュメントの 「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.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 オプションはフラッシュコンポーネントを有効もしくは無効にします。
default_culture
default_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 オプションはユーザーセッションの保存に使われる 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
PHP 公式マニュアルにおいて、それぞれのオプションの説明が session_set_cookie_params() 関数のページに記載されています。
session_cache_limiter
session_cache_limiter オプションは null にセットされている場合 (デフォルト)、このオプションの値は php.ini ファイルにしたがって PHP によって自動的にセットされます。ほかのすべての値に関して、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
caution
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
caution
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
caution
i18n 設定に true がセットされている場合にかぎり、このファクトリは定義されます。
source
source オプションは翻訳コンテナの種類を定義します。
組み込みのコンテナ: XLIFF、SQLite、MySQL と gettext
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
generate_shortest_url オプションに true がセットされている場合、ルーティングシステムは実現可能な最短ルートを生成します。symfony 1.0 と 1.1 と後方互換性のあるルートが必要であれば、このオプションに false をセットします。
extra_parameters_as_query_string
デフォルト: 新しいプロジェクトでは true、アップグレードしたプロジェクトでは false
extra_parameters_as_query_string オプションに true がセットされていれば、ルート生成に使われていないパラメータはクエリ文字列に変換されます。symfony 1.0 もしくは1.1のふるまいに戻すのであれば、このオプションに false をセットします。これらのバージョンでは、ルート生成に使われていないパラメータはルーティングシステムによって無視されるだけでした。
cache
デフォルト: なし
cache オプションはルーティングコンフィギュレーションとデータのキャッシュに使われる匿名キャッシュファクトリを定義します (くわしい説明はキャッシュの節をご参照ください)。
suffix
デフォルト: なし
すべてのルートに使われるデフォルトのサフィックスです。このオプションは推奨されていません。
load_configuration
デフォルト: true
load_configuration オプションは routing.yml ファイルをオートロードの対象に加えて、パースするかどうかを決めます。symfony プロジェクト外部の symfony ルーティングシステムを利用したいのであれば、このオプションに false をセットします。
lazy_routes_deserialize
デフォルト: false
lazy_routes_deserialize 設定に true がセットされていれば、ルーティングキャッシュの遅延デシリアライゼーションが有効になります。たくさんのルートをかかえており、もっともマッチするルートの順番が最初のほうにあれば、アプリケーションのパフォーマンスは改善されます。状況によっては、パフォーマンスにわるい影響を及ぼす可能性があるので、運用サーバーにデプロイする前に、この設定をテストしておくことをぜひおすすめします。
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 をセットしておくことをお忘れなく。
caution
このファクトリはつねに定義されていますが、ロギングが実行される条件は logging_enabled 設定に true がセットされている場合にかぎられます。
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.