注意: モジュールは version 1.0.3 以降でサポートされました。
モジュールは、モデル、 ビュー、コントローラ とその他のサポートしているコンポーネントから構成される自己完結した ソフトウェアユニットです。 多くの面でモジュールは、 アプリケーション に似ています。主な違いは、モジュールは単独では配置せず、アプリケーションの内部に 存在しなければならないという点です。 ユーザーは、通常のアプリケーションコントローラでするように、 そのコントローラにアクセスすることができます。
モジュールはいくつかのシナリオで役立ちます。 大規模アプリケーションでは、それをいくつかのモジュールに分け、 各々独立して開発と保守されるかもしれません。 ユーザー管理やコメント管理のような一般的に用いられる機能を、 将来のプロジェクトで簡単に再利用できるように、 モジュールで開発されるかもしれません。
モジュールはユニークな ID となる名前のディレクトリ下に
まとめられます。モジュールのディレクトリ構成は、
アプリケーションベースディレクトリ
と似ています。
以下に、 forum という名前のモジュールのディレクトリ構成を示します:
forum/
ForumModule.php モジュールクラスファイル
components/ 再利用可能なユーザコンポーネントを含む
views/ ウイジェットのためのビューを含む
controllers/ コントローラクラスファイルを含む
DefaultController.php デフォルトコントローラクラスファイル
extensions/ サードパーティエクステンションを含む
models/ モデルクラスファイルを含む
views/ コントローラビューとレイアウトファイルを含む
layouts/ レイアウトビューファイルを含む
default/ デフォルトコントローラのためビューファイルを含む
index.php インデックスビューファイル
モジュールは CWebModule より継承されたモジュールクラスを持つ必要があります。
クラス名は $id にモジュールID(もしくは、モジュールディレクトリ名)を入れ、
ucfirst($id).'Module' という形式を用いて決定します。
モジュールクラスは、モジュールコード間で共通して使用される情報を格納する
中心部分となります。
たとえば、モジュールパラメータを格納するために CWebModule::params を、
モジュールレベルで
アプリケーションコンポーネント
を共有するために CWebModule::components を使用できます。
ヒント: 新しいモジュールの基本的なスケルトンを作成するために
yiicツールを使用することができます。たとえば、上記したforumモジュールを 作るには、コマンドラインウィンドウで下記コマンドを実行します。% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> module forum
モジュールを使用するには、まず
アプリケーションベースディレクトリ
の modules ディレクトリの下にそのモジュールディレクトリを配置します。
次に、アプリケーションの modules プロパティで、
モジュール ID を宣言します。
たとえば、上記 forum モジュールを使用するために、
アプリケーション初期構成
で下記のようにします。
return array(
......
'modules'=>array('forum',...),
......
);モジュールは初期プロパティ値で設定することも可能です。
使用方法は、
アプリケーションコンポーネント
の設定と非常に似ています。
たとえば、forum モジュールがそのモジュールクラス中に postPerPage
という名前のプロパティを持っていれば、下記のように
アプリケーション初期構成
の中で設定できます。
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);モジュールのインスタンスは現在のアクティブなコントローラ中の
module プロパティによってアクセスできます。
モジュールインスタンスを通じて、モジュールレベルで共有されている情報に
アクセスすることができます
たとえば、上記の postPerPage 情報にアクセスするために、
下記の表現を使用できます:
$postPerPage=Yii::app()->controller->module->postPerPage;
// もしくは、もし $this がコントローラインスタンスを参照するなら下記のように
// $postPerPage=$this->module->postPerPage;モジュールでのコントローラアクションは
ルート(道筋)
moduleID/controllerID/actionID を使用してアクセスできます。
たとえば、上記の forum モジュールが PostController という名前の
コントローラを持っていれば、このコントローラの create アクションを
参照するために、
ルート(道筋)
forum/post/create を使用できます。
このルートに対応する URL は
http://www.example.com/index.php?r=forum/post/create になります。
ヒント: コントローラが
controllersのサブディレクトリにあるなら、 上記の ルート(道筋) フォーマットをまだ使用できます。 たとえば、PostControllerがforum/controllers/admin下にある場合、forum/admin/post/createを使用しているcreateアクションを参照できます。
モジュールはネスト化することができます。
これは、モジュールが他のモジュールを含むことができるということです。
前者の 親モジュール を呼び出した上に、後者の 子モジュール を
呼び出します。子モジュールは親モジュールの modules ディレクトリ下に
配置されなければなりません。
子モジュールでコントローラアクションにアクセスするために、
ルート parentModuleID/childModuleID/controllerID/actionID を
使用しなければなりません。
Signup or Login in order to comment.