アプリケーションはリクエストが処理される実行コンテキストをカプセル化したオブジェクトです。
その主なタスクは、リクエストに関するいくつかの基本的な情報を収集して、その先の処理を行うために適切なコントローラへリクエストを送出することです。
さらにアプリケーションレベルの初期構成を保つための中心的な場所としても振舞います。
この理由からアプリケーションオブジェクトはフロントコントローラとも呼ばれます。
アプリケーションはエントリースクリプトにより、シングルトンとして生成されます。 アプリケーションシングルトンはどの場所からでも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プロパティを構成することによって、 どのアプリケーションコンポーネントを使用する場合でも、クラスとプロパティ値をカスタマイズすることが出来ます。 例えば、以下のように、複数のmemcacheサーバを使用するようにCMemCacheコンポーネントを構成することが可能です。
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 - クライアントスクリプト(javascriptやCSS)を管理します。
coreMessages: CPhpMessageSource - Yiiフレームワークで使用される翻訳されたコアメッセージを提供します。
db: CDbConnection - データベース接続を提供します。注意: このコンポーネントを使うためにはconnectionStringプロパティを構成しなければなりません。
errorHandler: CErrorHandler - キャッチされていないPHPエラーや例外を扱います。
format: CFormatter - 表示目的のため、データ値をフォーマットします。
messages: CPhpMessageSource - Yiiアプリケーションによって使用される翻訳されたメッセージを提供します。
request: CHttpRequest - ユーザリクエストに関連した情報を提供します。
securityManager: CSecurityManager - セキュリティ関連のサービス(例えばハッシュ化、暗号化)を提供します。
session: CHttpSession - セッションに関連した機能を提供します。
statePersister: CStatePersister - グローバルな状態を持続させる機構を提供します。
urlManager: CUrlManager - URLの分析と生成の機能を提供します。
themeManager: CThemeManager - テーマを管理します。
ユーザリクエストを取り扱うとき、アプリケーションは次のライフサイクルを経ます:
CApplication::preinit()によりアプリケーションをプレ初期化します;
クラス自動ローダとエラー処理を準備します;
コアアプリケーションコンポーネントを登録します;
アプリケーション構成をロードします;
CApplication::init()によりアプリケーションを初期化します; - アプリケーションビヘイビアを登録します;
イベントonBeginRequestを発行します;
ユーザリクエストを処理します:
イベントonEndRequestを発行します;
Be the first person to leave a comment
Please login to leave your comment.