mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 08:14:21 +01:00
107 lines
7.2 KiB
Plaintext
107 lines
7.2 KiB
Plaintext
モジュール
|
|
======
|
|
|
|
モジュールは、[モデル](/doc/guide/basics.model)、[ビュー](/doc/guide/basics.view)、[コントローラ](/doc/guide/basics.controller) およびその他の支援的コンポーネントから構成される自己完結したソフトウェアユニットです。
|
|
多くの面でモジュールは、 [アプリケーション](/doc/guide/basics.application) に似ています。
|
|
主な違いは、モジュールは単独では配置されず、アプリケーションの内部に存在しなければならないという点です。
|
|
ユーザは、通常のアプリケーションのコントローラにアクセスするように、モジュールのコントローラにアクセスすることができます。
|
|
|
|
モジュールはいくつかのシナリオで役立ちます。
|
|
大規模アプリケーションでは、いくつかのモジュールに分け、各々独立して開発・保守されるかもしれません。
|
|
ユーザ管理やコメント管理のような一般的に用いられる機能は、将来のプロジェクトで簡単に再利用できるように、モジュールとして開発されるかもしれません。
|
|
|
|
モジュールの作成
|
|
---------------
|
|
|
|
モジュールはユニークな [ID|CWebModule::id] となる名前のディレクトリ下にまとめられます。
|
|
モジュールのディレクトリ構成は、[アプリケーションベースディレクトリ](/doc/guide/basics.application#sec-3) と似ています。
|
|
以下に、`forum` という名前のモジュールのディレクトリ構成を示します:
|
|
|
|
~~~
|
|
forum/
|
|
ForumModule.php モジュールクラスファイル
|
|
components/ 再利用可能なユーザコンポーネントを含む
|
|
views/ ウイジェットのためのビューを含む
|
|
controllers/ コントローラクラスファイルを含む
|
|
DefaultController.php デフォルトコントローラクラスファイル
|
|
extensions/ サードパーティのエクステンションを含む
|
|
models/ モデルクラスファイルを含む
|
|
views/ コントローラビューとレイアウトファイルを含む
|
|
layouts/ レイアウトビューファイルを含む
|
|
default/ デフォルトコントローラのビューファイルを含む
|
|
index.php インデックスビューファイル
|
|
~~~
|
|
|
|
モジュールは [CWebModule] より継承されたモジュールクラスを持つ必要があります。
|
|
クラス名は `ucfirst($id).'Module'` という式を用いて決定します (`$id` はモジュール ID、または、モジュールのディレクトリ名です)。
|
|
モジュールクラスは、モジュールコード間で共通して使用される情報を格納する中心部分となります。
|
|
たとえば、モジュールパラメータを格納するために [CWebModule::params] を使用し、
|
|
モジュールレベルで [アプリケーションコンポーネント](/doc/guide/basics.application#sec-4) を共有するために [CWebModule::components] を使用することができます。
|
|
|
|
> Tip|ヒント: 新しいモジュールの基本的なスケルトンを作成するために Gii のモジュールジェネレータを使うことができます。
|
|
|
|
モジュールの使用
|
|
------------
|
|
|
|
モジュールを使用するには、まず [アプリケーションベースディレクトリ](/doc/guide/basics.application#sec-3) の `modules` ディレクトリの下に、そのモジュールのディレクトリを配置します。
|
|
次に、アプリケーションの [modules|CWebApplication::modules] プロパティで、モジュール ID を宣言します。
|
|
たとえば、上記 `forum` モジュールを使用するために、[アプリケーション初期構成](/doc/guide/basics.application#sec-2) で下記のように記述します。
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
......
|
|
'modules'=>array('forum',...),
|
|
......
|
|
);
|
|
~~~
|
|
|
|
モジュールは初期プロパティ値によって構成することも可能です。
|
|
方法は、[アプリケーションコンポーネント](/doc/guide/basics.application#sec-4) の設定と非常に似ています。
|
|
たとえば、`forum` モジュールがそのモジュールクラス中に `postPerPage` という名前のプロパティを持っていれば、
|
|
下記のように [アプリケーション初期構成](/doc/guide/basics.application#sec-2) の中で設定できます。
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
......
|
|
'modules'=>array(
|
|
'forum'=>array(
|
|
'postPerPage'=>20,
|
|
),
|
|
),
|
|
......
|
|
);
|
|
~~~
|
|
|
|
モジュールのインスタンスは、現在のアクティブなコントローラ内の [module|CController::module] プロパティによってアクセスできます。
|
|
そして、モジュールインスタンスを通じて、モジュールレベルで共有されている情報にアクセスすることができます。
|
|
たとえば、上記の `postPerPage` 情報にアクセスするために、下記の式を使用できます:
|
|
|
|
~~~
|
|
[php]
|
|
$postPerPage=Yii::app()->controller->module->postPerPage;
|
|
// もしくは、もし $this がコントローラインスタンスを参照するなら下記のように
|
|
// $postPerPage=$this->module->postPerPage;
|
|
~~~
|
|
|
|
モジュールのコントローラアクションは [ルート (経路)](/doc/guide/basics.controller#sec-2) `moduleID/controllerID/actionID` を使用してアクセスできます。
|
|
たとえば、上記の `forum` モジュールが `PostController` という名前のコントローラを持っていれば、このコントローラの `create` アクションを参照するために、[ルート (経路)](/doc/guide/basics.controller#sec-2) `forum/post/create` を使用できます。
|
|
このルートに対応する URL は `http://www.example.com/index.php?r=forum/post/create` になります。
|
|
|
|
> Tip|ヒント: コントローラが `controllers` のサブディレクトリにある場合でも、上記の [ルート (経路)](/doc/guide/basics.controller#sec-2) の形式を引き続いて使用できます。
|
|
たとえば、`PostController` が `forum/controllers/admin` 下にある場合、`forum/admin/post/create` を使用して `create` アクションを参照できます。
|
|
|
|
ネストしたモジュール
|
|
-------------
|
|
|
|
モジュールは何段階でもネストすることができます。
|
|
すなわち、モジュールが別のモジュールを含み、そのモジュールがさらに別のモジュールを含む、という事が可能です。
|
|
含む側を **親モジュール** と呼び、含まれる側を **子モジュール** と呼びます。
|
|
子モジュールは、親モジュールの [modules|CWebModule::modules] プロパティの中で宣言されなければなりません。
|
|
上記で示したアプリケーション初期構成の中でモジュールを宣言したのと同じです。
|
|
|
|
子モジュールのコントローラアクションにアクセスするためには、ルート `parentModuleID/childModuleID/controllerID/actionID` を使用しなければなりません。
|
|
|
|
<div class="revision">$Id$</div>
|