アプリケーションはリクエストが処理される実行コンテキストをカプセル化したオブジェクトです。
その主なタスクは、リクエストに関するいくつかの基本的な情報を収集して、その先の処理を行うために適切なコントローラへリクエストを送出することです。
さらにアプリケーションレベルの初期構成を保つための中心的な場所としても振舞います。
この理由からアプリケーションオブジェクトは フロントコントローラ
とも呼ばれます。
アプリケーションは エントリスクリプト により、シングルトンとして生成されます。 アプリケーションシングルトンはどの場所からでも Yii::app() としてアクセスすることができます。
デフォルトでは、アプリケーションオブジェクトは CWebApplication のインスタンスです。 これをカスタマイズするために、通常は初期構成ファイル (または配列) を提供して、インスタンスの生成時にプロパティ値を初期化します。 アプリケーションをカスタマイズする別の方法は、CWebApplication を拡張することです。
初期構成は "キー-値" のペアの配列です。 キーはアプリケーションインスタンスのプロパティ名を表します。 値は対応するプロパティの初期値です。 例えば、以下の初期構成ファイルは name 及び defaultController プロパティを構成します。
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
アプリケーションもまた、Yii のほとんど全てのクラスと同じように コンポーネント であるということに 注意して下さい。このことは、二つのことを意味します。
import
というプロパティは setImport メソッドによって定義されており、次のようにして設定します。array(
'import'=>array(
'application.components.*',
),
)
一般には初期構成は独立した PHP スクリプトに格納します (例えばprotected/config/main.php
)。
このスクリプトの中で、以下のように構成の配列を返します。
return array(...);
初期構成を適用するには、アプリケーションのコンストラクタに初期構成ファイル名をパラメータとして渡します。 あるいは、普通は エントリスクリプト の中で、以下のように Yii::createWebApplication() に初期構成ファイル名をパラメータとして渡します。
$app=Yii::createWebApplication($configFile);
ヒント: もしアプリケーション初期構成が非常に複雑な場合は、複数のファイルに分割することができます。 それぞれのファイルは構成配列の一部をリターンします。そしてメインの初期構成ファイルでは PHP の
include()
によって 他の構成ファイルを組み込み、完全な構成配列にマージします。
アプリケーションベースディレクトリは、セキュリティ上注意を要する全ての PHP スクリプトとデータの格納場所のルートディレクトリです。
デフォルトでは、エントリスクリプトを含むディレクトリの下にある protected
という名前のサブディレクトリです。
この場所は、アプリケーション初期構成 の basePath プロパティ値を変更することでカスタマイズが可能です。
アプリケーションベースディレクトリより下の内容はウェブユーザによってアクセスされないように保護される必要があります。
Apache HTTP サーバ を用いる場合、.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 を発行します;
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.