注意: モジュールは 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.