1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.controller.quickstart">
5 <title>Zend_Controller クイックスタート</title>
7 <sect2 id="zend.controller.quickstart.introduction">
11 <classname>Zend_Controller</classname> は、Zend Framework の <acronym>MVC</acronym>
12 システムの中心となるものです。<acronym>MVC</acronym> は <ulink
13 url="http://en.wikipedia.org/wiki/Model-view-controller">モデル-ビュー-コントローラ</ulink>
14 の頭文字をとったもので、アプリケーションのロジックと表示ロジックを分離させる設計手法です。
15 <classname>Zend_Controller_Front</classname> は
17 url="http://www.martinfowler.com/eaaCatalog/frontController.html">
18 フロントコントローラ</ulink> パターンを実装しており、
19 すべてのリクエストをいったんフロントコントローラで受け取った上でその
20 <acronym>URL</acronym> にもとづいたアクションコントローラに配送します。
24 <classname>Zend_Controller</classname> は、拡張性を考慮して作成されています。
25 拡張の方法としては、既存のクラスのサブクラスを作成する方法と
26 アクションヘルパーを作成する方法があります。
27 新しいサブクラスを作成すると、コントローラクラスの基盤となる
28 インターフェイスや機能を新たに書くことができます。
29 アクションヘルパーを使用すると、システムの機能を強化したり変更したりできるようになります。
33 <sect2 id="zend.controller.quickstart.go">
34 <title>クイックスタート</title>
37 より詳しい情報が知りたい場合は、次のセクションを参照ください。
38 とりあえず動かしてみたいという方は、ここを読むといいでしょう。
41 <sect3 id="zend.controller.quickstart.go.directory">
42 <title>ファイルシステムレイアウトの作成</title>
49 <programlisting language="php"><![CDATA[
67 <sect3 id="zend.controller.quickstart.go.docroot">
68 <title>ドキュメントルートの設定</title>
71 ウェブサーバのドキュメントルートを、先ほどのレイアウト中の
72 <filename>html/</filename> ディレクトリに設定します。
76 <sect3 id="zend.controller.quickstart.go.rewrite">
77 <title>rewrite ルールの作成</title>
80 上のレイアウトの <filename>html/.htaccess</filename>
84 <programlisting language="php"><![CDATA[
86 RewriteCond %{REQUEST_FILENAME} -s [OR]
87 RewriteCond %{REQUEST_FILENAME} -l [OR]
88 RewriteCond %{REQUEST_FILENAME} -d
89 RewriteRule ^.*$ - [NC,L]
90 RewriteRule ^.*$ index.php [NC,L]
94 <title>mod_rewrite について</title>
97 上のリライトルールは、バーチャルホストのドキュメントルート配下にある
98 すべてのファイルへのアクセスを許可するものです。
99 この方式で公開してしまってはまずいファイルがある場合は、
100 このルールにさらに制約を追加しなければなりません。
103 url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">
104 mod_rewrite について</ulink>
110 <acronym>IIS</acronym> 7.0 をお使いの場合は、次のような rewrite 設定を使用します。
113 <programlisting language="xml"><![CDATA[
114 <?xml version="1.0" encoding="UTF-8"?>
119 <rule name="Imported Rule 1" stopProcessing="true">
121 <conditions logicalGrouping="MatchAny">
122 <add input="{REQUEST_FILENAME}"
123 matchType="IsFile" pattern=""
124 ignoreCase="false" />
125 <add input="{REQUEST_FILENAME}"
126 matchType="IsDirectory"
127 pattern="" ignoreCase="false" />
129 <action type="None" />
131 <rule name="Imported Rule 2" stopProcessing="true">
133 <action type="Rewrite" url="index.php" />
143 (シンボリックリンク、空でないファイル、あるいは空でないディレクトリ)
145 それ以外のすべてのリクエストをフロントコントローラに転送します。
150 上の rewrire ルールは Apache 用のものです。
152 <link linkend="zend.controller.router.introduction">
153 ルータのドキュメント</link> を参照ください。
158 <sect3 id="zend.controller.quickstart.go.bootstrap">
159 <title>起動ファイルの作成</title>
162 起動ファイルとはすべてのリクエストの転送先となるファイルのことで、
163 今回の例では <filename>html/index.php</filename> がそれにあたります。
164 <filename>html/index.php</filename> をお好みのエディタで開き、次の内容を追加します。
167 <programlisting language="php"><![CDATA[
168 Zend_Controller_Front::run('/path/to/app/controllers');
172 これは、フロントコントローラのインスタンスとディスパッチを行います。
173 この結果、アクションコントローラへリクエストが転送されます。
177 <sect3 id="zend.controller.quickstart.go.controller">
178 <title>デフォルトのアクションコントローラの作成</title>
181 アクションコントローラについて説明する前に、まず
182 Zend Framework でのリクエストの処理方法について知っておきましょう。
183 デフォルトでは、<acronym>URL</acronym> パスの最初の部分がコントローラ、
184 そしてその次の部分がアクションに対応します。たとえば <acronym>URL</acronym> が
185 <filename>http://framework.zend.com/roadmap/components</filename>
186 である場合、パスは <filename>/roadmap/components</filename>
187 となり、これは <emphasis>roadmap</emphasis> コントローラの
188 <emphasis>components</emphasis> アクションに対応します。
189 アクションを省略した場合は <emphasis>index</emphasis> アクションであるとみなされます。
190 またコントローラを省略した場合は <emphasis>index</emphasis> コントローラであるとみなされます
191 (Apache が自動的に <emphasis>DirectoryIndex</emphasis>
196 <classname>Zend_Controller</classname> のディスパッチャは、
197 コントローラを対応するクラスに関連付けます。
198 デフォルトでは、コントローラ名の先頭を大文字にしたものに
199 <emphasis>Controller</emphasis> をつなげたものがクラス名となります。
200 つまり、上の例では <emphasis>roadmap</emphasis> コントローラが
201 <emphasis>RoadmapController</emphasis> クラスに対応することになります。
205 同様に、アクションもコントローラクラスのメソッドに関連付けます。
206 デフォルトでは、アクション名を小文字に変換して
207 <emphasis>Action</emphasis> を追加したものがメソッド名となります。
208 つまり、上の例では <emphasis>components</emphasis> アクションは
209 <methodname>componentsAction()</methodname> メソッドになり、最終的に
210 <methodname>RoadmapController::componentsAction()</methodname>
215 続いて、デフォルトのアクションコントローラと
217 先ほど説明したように、デフォルトのコントローラ名およびアクション名はどちらも
218 <emphasis>index</emphasis> となります。
219 <filename>application/controllers/IndexController.php</filename>
223 <programlisting language="php"><![CDATA[
224 /** Zend_Controller_Action */
225 class IndexController extends Zend_Controller_Action
227 public function indexAction()
235 <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
236 アクションヘルパーが有効になります。つまり、
237 アクションメソッドとそれに対応するビュースクリプトを用意すれば、
238 すぐにその内容をレンダリングできるというわけです。
239 デフォルトでは、<acronym>MVC</acronym> のビュー層として <classname>Zend_View</classname> を使用します。
240 <emphasis>ViewRenderer</emphasis> は、コントローラ名
241 (たとえば <emphasis>index</emphasis>) とアクション名
242 (たとえば <emphasis>index</emphasis>) から処理するテンプレートを決定します。
244 <filename>.phtml</filename> となります。つまり、上の例では
245 <filename>index/index.phtml</filename> をレンダリングします。
246 さらに <emphasis>ViewRenderer</emphasis> は、
247 コントローラと同一階層にある <filename>views/</filename>
248 ディレクトリを自動的にビューの基底ディレクトリとみなし、
249 <filename>views/scripts/</filename> ビュースクリプトがおかれるものと考えます。
250 したがって、実際にレンダリングされるテンプレートは
251 <filename>application/views/scripts/index/index.phtml</filename>
256 <sect3 id="zend.controller.quickstart.go.view">
257 <title>ビュースクリプトの作成</title>
260 <link linkend="zend.controller.quickstart.go.controller">
261 先ほど説明したように</link>、ビュースクリプトの場所は
262 <filename>application/views/scripts/</filename> です。
263 デフォルトコントローラにおけるデフォルトのアクションのビュースクリプトは
264 <filename>application/views/scripts/index/index.phtml</filename>
265 となります。このファイルを作成し、何か <acronym>HTML</acronym> を入力してみましょう。
268 <programlisting language="php"><![CDATA[
270 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
271 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
274 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
275 <title>My first Zend Framework App</title>
278 <h1>Hello, World!</h1>
284 <sect3 id="zend.controller.quickstart.go.errorhandler">
285 <title>エラーコントローラの作成</title>
289 <link linkend="zend.controller.plugins.standard.errorhandler">
290 エラーハンドラプラグイン</link> が登録されています。
291 このプラグインを使用するには、エラー処理用のコントローラが必要です。
292 デフォルト設定では、デフォルトモジュールの
293 <emphasis>ErrorController</emphasis> に <methodname>errorAction()</methodname>
294 というメソッドがあることを想定しています。
297 <programlisting language="php"><![CDATA[
298 class ErrorController extends Zend_Controller_Action
300 public function errorAction()
307 先ほど説明したディレクトリ構成により、このファイルは
308 <filename>application/controllers/ErrorController.php</filename>
309 に配置されることになります。これとは別に、ビュースクリプト
310 <filename>application/views/scripts/error/error.phtml</filename>
311 が必要です。その中身は、たとえば次のようになるでしょう。
314 <programlisting language="php"><![CDATA[
316 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
317 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
320 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
325 <p>エラーが発生しました。後ほどもう一度お試しください。</p>
331 <sect3 id="zend.controller.quickstart.go.finish">
332 <title>実際に見てみましょう!</title>
335 ここまでくれば、実際にブラウザでサイトを表示してみることができます。
336 あなたのドメインが <filename>example.com</filename> だとすると、
337 以下のいずれかの <acronym>URL</acronym> で先ほど作成したページが表示されることでしょう。
342 <para><filename>http://example.com/</filename></para>
346 <para><filename>http://example.com/index</filename></para>
350 <para><filename>http://example.com/index/index</filename></para>
355 これで、実際にコントローラやアクションを作成する準備ができました。