アプリケーションはリクエスト処理の実行コンテキストを表します。その主なタスクはユーザのリクエストを解析し、その先の処理を行うために適切なコントローラへ処理を移すことです。さらにアプリケーションレベルの初期構成を保つための中心的な場所として振舞います。この理由からアプリケーションはフロントコントローラ
とも呼ばれます。
アプリケーションはエントリースクリプトにより、シングルトンとして生成されます。 アプリケーションシングルトンはどの場所からでもYii::app()としてアクセスすることができます。
デフォルトでは、アプリケーションはCWebApplicationのインスタンスです。 アプリケーションインスタンスが生成された時にプロパティ値を初期化するために、通常は初期構成ファイルまたは配列を提供します。 別のアプリケーションカスタマイズ方法はCWebApplicationを継承することです。
初期構成はキーと値のペアの要素を持つ配列です。キーはアプリケーションインスタンスのプロパティ名を表します。 値は対応するキーの初期値です。 例えば、以下の初期構成ファイルはname及びdefaultControllerプロパティを構成します。
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
一般には構成は別のPHPスクリプトに格納されます(例えばprotected/config/main.php
)。
このスクリプト中では構成が以下のようにリターンされます。
return array(...);
構成を適用するには、アプリケーションのコンストラクタに構成ファイル名をパラメータとして渡すか、あるいは以下のように エントリースクリプト中にもよく見られるように、Yii::createWebApplication()に渡します。
$app=Yii::createWebApplication($configFile);
ヒント: もしアプリケーション構成が非常に複雑な場合は、複数のファイルに分割することができます。 それぞれのファイルは構成配列の一部をリターンします。そしてメインの構成ファイルではPHPの
include()
により 他の構成ファイルを組み込み、完全な構成配列にマージします。
アプリケーションベースディレクトリはルートディレクトリであり、これは全てのセキュリティに関係するPHPスクリプトやデータを含みます。デフォルトでは、protected
という名前のサブディレクトリであり、エントリスクリプトを含むディレクトリの下に位置付けられます。その場所は、アプリケーション構成のbasePathプロパティ値を変更することでカスタマイズが可能です。
アプリケーションベースディレクトリより下の内容はウェブユーザからのアクセスから守られる必要があります。
Apache HTTP serverを用いる場合、.htaccess
をベースディレクトリの下に置くことで容易に実現可能です。.htaccess
ファイルの内容は以下のとおりです。
deny from all
アプリケーションの機能はフレキシブルなコンポーネントアーキテクチャによって容易にカスタマイズでき、また充実させることができます。アプリケーションはアプリケーションコンポーネントを管理し、それぞれは個別の特徴を実装します。 例えば、アプリケーションはユーザリクエストをCUrlManagerコンポーネントとCHttpRequestコンポーネントの助けを借りて 解決します。
アプリケーションのcomponentsプロパティを構成するには、 アプリケーションで使用されるアプリケーションコンポーネントのクラスとプロパティ値をカスタマイズ可能です。 例えば、我々はCMemCacheコンポーネントを複数のmemcacheサーバに対応させるために以下のように構成することが可能です。
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)
上においてはcomponents
配列にcache
要素を追加しました。そしてcache
要素は
コンポーネントのクラスがCMemCache
であり、servers
プロパティ値がこのようであると記述します。
アプリケーションコンポーネントにアクセスするにはYii::app()->ComponentID
を用いてください。
ここで、ComponentID
はコンポーネントのID(例えばYii::app()->cache
)を参照します。
アプリケーションコンポーネントは構成ファイル中でenabled
プロパティを偽にセットすることで無効にすることができます。
無効にされたコンポーネントへのアクセスはnullがリターンされます。
ヒント: デフォルトでは、アプリケーションコンポーネントは必要に応じて生成されます。 これは、アプリケーションコンポーネントはユーザリクエストの間にアクセスされなければ一度には生成されないことを意味します。 結果として、アプリケーションが多量のコンポーネントを持つように構成されても全体としての性能は落ちません。 あるアプリケーションコンポーネント(例えばCLogRouter)はアクセスされようがされまいが生成される必要があります。 そのためには、これらのIDをアプリケーションのプロパティpreloadで指示する必要があります。
Yiiは、ウェブアプリケーションに共通な機能を提供するために、あらかじめコアアプリケーションコンポーネントを定義しています。 例えば、requestコンポーネントはユーザリクエストを解決し、URLやクッキーの情報を提供するために使用されます。このようなコアコンポーネントのプロパティ値を構成するために、我々はYiiのデフォルト動作のほとんど全てを変更可能です。
以下はCWebApplicationによってあらかじめ宣言されたコアコンポーネントのリストです。
assetManager: CAssetManager - プライベートアセットファイルの発行を管理します。
authManager: CAuthManager - 役割ベースアクセス制御(RBAC)を管理します。
cache: CCache - データキャッシュ機能を提供します。注意:実際のクラス(例:CMemCache, CDbCache) を指定してください。さもないとこのコンポーネントをアクセスした場合にnullがリターンされます。
clientScript: CClientScript - クライアントスクリプト(javascriptsやCSS)を管理します。
coreMessages: CPhpMessageSource - Yiiフレームワークのコアメッセージの翻訳を提供します。
db: CDbConnection - データベース接続を提供します。注意: このコンポーネントを使うためにはconnectionStringプロパティを構成しなければなりません。
errorHandler: CErrorHandler - キャッチされていないPHPエラーや例外を扱います。
messages: CPhpMessageSource - Yiiアプリケーションによって使用される翻訳されたメッセージを提供します。
request: CHttpRequest - ユーザリクエストに関連した情報を提供します。
securityManager: CSecurityManager - セキュリティ関連のサービス(例えばハッシュ化、暗号化)を提供します。
session: CHttpSession - セッションに関連した機能を提供します。
statePersister: CStatePersister - グローバルな状態の持続手段を提供します。
urlManager: CUrlManager - URL分析と生成機能を提供します。
themeManager: CThemeManager - テーマを管理します。
ユーザーリクエストを取り扱うとき、アプリケーションは次のライフサイクルを経ます:
CApplication::preinit()によりアプリケーションをプレ初期化します;
クラス自動ローダとエラー処理を準備します;
コアアプリケーションコンポーネントを登録します;
アプリケーション構成をロードします;
CApplication::init()によりアプリケーションを初期化します; - アプリケーションビヘイビアを登録します;
イベントonBeginRequestを発行します;
ユーザー要請を処理します:
イベントonEndRequestを発行します;
Signup or Login in order to comment.