forked from NEKOGET/FuelPHP_docs_jp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
modules.html
222 lines (177 loc) · 11.6 KB
/
modules.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./../assets/css/combined.css">
<link rel="shortcut icon" href="./../favicon.ico" />
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
var path = './../';
</script>
<script src="./../assets/js/combined.js"></script>
<title>モジュール - 概要 - FuelPHP ドキュメント</title>
</head>
<body>
<div id="container">
<header id="header">
<div class="table">
<h1>
<a href="http://fuelphp.com"><img height="37px" width="147px" src="./../assets/img/fuel.png" /></a>
<strong>Documentation</strong>
</h1>
<form id="google_search">
<p>
<span id="search_clear"> </span>
<input type="submit" name="search_submit" id="search_submit" value="検索" />
<input type="text" value="" id="search_input" name="search_input" />
</p>
</form>
</div>
<nav>
<div class="clear"></div>
</nav>
<a href="#" id="toc_handle">目次</a>
<div class="clear"></div>
</header>
<div id="cse">
<div id="cse_point"></div>
<div id="cse_content"></div>
</div>
<div id="main">
<h2>モジュール</h2>
<h3>モジュールとは?</h3>
<p>
モジュールとは、独立した MVC 要素のグループのことです。モジュールを使うと、コードを再利用しカプセル化することが可能になります。
モジュールは、通常、アプリケーションディレクトリの下の <strong>modules</strong> ディレクトリに置かれます。
結構な量のコードをもつ大きなプロジェクトを動かしている場合、
モジュールを使ってみてはいかがでしょうか。
モジュールは、物事をきちんと秩序立てて整理する助けになるでしょう。
</p>
<p>
例えばブログモジュールやアルバムモジュールのように、モジュールは独立して動作させることが可能です。グローバルなコードに対するいかなるアクセスも行わず、モジュールのコントローラに対して直接ルーティングすることが出来ます。
モジュールは、純粋な HMVC コンテクストの中で使うことも出来ます。その場合、ページ生成に必要な諸結果 (の一部) を得るために、コントローラは別のコントローラを呼び出すことが出来ます。
</p>
<h3 id="module_config">モジュールの設定</h3>
<p>
利用にあたっては、モジュールの存在を Fuel 自身に教えてあげる必要があります。
デフォルトでは、モジュールはアプリケーションの modules フォルダの中に存在します。また、アプリケーションの config.php の中で 'modules_path' を設定することも出来ます。
複数のパスを設定することも出来ます。設定したパスはその順に検索されます。
</p>
<pre class="php"><code>/**
* uri の冒頭セグメント名によって経路付けられるモジュールを
* アプリケーションから分離出来るようにするためには、
* 下記のように、それぞれ basepath を記述する必要があります。
*/
'module_paths' => array(
APPPATH.'modules'.DS, // アプリケーションモジュールのパス
APPPATH.'..'.DS.'globalmods'.DS // グローバルモジュールのパス
),
</code></pre>
<p>パス設定するときには、OS プラットフォーム毎に対応している Fuel のディレクトリセパレータ定数 DS を、それぞれパスの末尾に付けるのを忘れないでください。</p>
<h3 id="module_namespace">モジュールの名前空間</h3>
<p>それぞれ独自に開発しているコード間のクラス名が衝突してしまう、というような問題に出くわすことがあります。たとえば、多くのモジュールが 1 つの管理コントローラのもとにある場合が、それにあたります。Fuel では、名前衝突を避けるために全モジュールが PHP の名前空間のもとで動作するようになっています。名前空間は <strong><u>必ず</u></strong> 当該モジュールフォルダ名と同一でなければなりません。</p>
<pre class="php"><code><?php
/**
* Mymodule モジュールの中でのモジュールコントローラ
*/
namespace Mymodule;
class Controller_Widget
{
// ここに、たとえばアプリケーションコントローラのようなコントローラのコードを書きます。
}
</code></pre>
<p class="note">
もし<a href="./namespacing.html#controllers">ここ</a>の例にあるようにコントローラを名前空間の中に移動したのならば、
同様の設定をモジュールのコントローラにもしなければなりません。今回のサンプルでいうならば、名前空間は <var>Mymodule\Controller</var> でクラス名は <var>Widget</var> となります。
</p>
<h3 id="folder_structure">モジュールフォルダの構造</h3>
<p>
新しいモジュールを作る時に最初にやるべきことは、設定ファイルでパスを設定したモジュールフォルダの中にフォルダを作ることです。
フォルダの名前は、モジュール名とモジュール各クラスのための名前空間となります。
また、モジュールのコントローラにルート(経路)付けたい時やHMVCからの呼び出しがあった場合の <a href="../classes/request/request.html">Request</a> の一部として、URI 内でその名前が使われることがあります。
</p>
<p>
モジュールはそれ自身の中にアプリケーションを包含している、と見なすことができます。モジュールフォルダの構造は慣れ親しんだものであることにあなたは気づくでしょう。
モジュールのフォルダ構造はアプリケーションフォルダのそれと同じなのです。下記のフォルダ構造がモジュールでサポートされています:
</p>
<ul style="margin-top:-20px">
<li>classes
<ul style="padding-bottom:0px;">
<li>controller</li>
<li>model</li>
<li>view</li>
</ul>
</li>
<li>config</li>
<li>lang</li>
<li>tasks</li>
<li>views</li>
</ul>
<h3 id="cross_module_file_loading">モジュール間のファイル横断読み込み</h3>
<p>
設定ファイルであろうとビューファイルであろうと、モジュールを横断した読み込みを行う場合は、
モジュール名をファイル名プレフィックスに付け加えなければなりません:
</p>
<pre class="php"><code>// config のモジュール横断読み込み
\Config::load('othermodule::myconfig');
// ビューのモジュール横断読み込み
\View::forge('othermodule::subdir/view');</code></pre>
<p>モジュールからタスクを実行します:</p>
<pre class="cli"><code>$ php oil refine <modulename>::<taskname>:<methodname></code></pre>
<h3 id="module_routing">モジュールルーティング</h3>
<p>
モジュールでルーティングを行う場合、モジュールの config フォルダ内に <b>routes.php</b> を含めることで、独自のルートを加えることが出来ます。
Fuel が、URI の最初のセグメントがモジュールを指示していることを検出すると、そのモジュールの経路のみが読み込まれます。
モジュールで設定したルートは、メインルート設定で設定されているかもしれない (:any) のルートが、モジュールのルーティングの前にマッチしてしまわないように、ルート配列の冒頭に追加されます。
</p>
<p>
上の点は、次のことを意味しています。すなわち、モジュールで設定されたルートはグローバルルーティングや他のモジュールのルートを定義するために使うことは出来ない、ということです。
別の言い方をしましょう。ルート設定 (配列) の左辺は、URI の最初のセグメントに現行モジュールが常に含まれていなければならない、ということです。
右辺は、他の各節で書いたのと同様で、どのようなものでも記述可能です。
アプリケーションコントローラあるいは他のモジュールに対するルートを設定することは完全に可能です。
</p>
<h3 id="modules_and_hmvc">モジュールと HMVC リクエスト</h3>
<p>
アプリケーションから論理的に独立分離したモジュールを作るという場合を除けば、
モジュールのコントローラを HMVC コンテキストの中で使うことも可能です。
そのコンテキストにおいては、リクエストされた URI による最終生成物を作るためにアプリケーションのコントローラの 1 つが他のモジュールコントローラの 1 つを呼び出します。
</p>
<p>
この点については更に、<a href="./hmvc.html">HMVC リクエストのドキュメント</a> を参照ください。
</p>
<h3 id="static_calls">モジュールの外部で、他のモジュールのクラスを使う</h3>
<p>
当然のことですが、モジュールのクラスをモジュールの外部で使うことも可能です。
そのためには、そのクラスの自動読み込みを Fuel が出来るようになっていなければなりません。
これは、モジュールがどこにあるのか Fuel に教えておく必要がある、ということを意味します。読み込み方法としては、2 つの方法があります。
</p>
<p>
1 つは、<code>'always_load'</code> で読み込むモジュールを特定することで予めモジュールを読み込む方法で、
アプリケーションの <code>config.php</code> ファイルで <code>'modules'</code> を設定する方法です:
</p>
<pre class="php"><code>'always_load' => array(
/**
* これらのモジュールは Fuel が動作開始する時に常に読み込まれます。
* 次のような方法でモジュール指定をすることが可能です:
*
* array('module_name');
*
* パスは module_paths として動作するように設定されていなければなりません。
*/
'modules' => array('mymodule'),</code></pre>
<p>2 つ目の方法として、モジュールの静的メソッドを使う前に、モジュールをその都度付け加える方法です。:</p>
<pre class="php"><code>// MyModule モジュールにアクセスできるようにします
Module::load('mymodule');</code></pre>
<p>そうすれば、次のようにモジュールのクラスを呼び出すことが出来ます</p>
<pre class="php"><code>\Mymodule\Myclass::mymethod('params');</code></pre>
</div>
<footer>
<p>
© FuelPHP Development Team 2010-2016 - <a href="http://fuelphp.com">FuelPHP</a> is released under the MIT license.
[ <a href="https://github.com/fuel/docs/commits/1.8/develop/general/modules.html">原文コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/commits/1.8/develop_japanese/general/modules.html">翻訳コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/blob/1.8/develop_japanese/general/modules.html">GitHubで修正</a> ]
</p>
</footer>
</div>
</body>
</html>