「フロントコントローラ」の編集履歴(バックアップ)一覧はこちら
「フロントコントローラ」(2008/10/26 (日) 08:40:22) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<h3>フロントコントローラ</h3>
<p> フロントコントローラとは、公開ディレクトリ上に置く1つだけのファイル[ index.php ]のことを言います。</p>
<ol><li>フロントコントローラのインスタンスを取得する</li>
<li>コントローラのディレクトリを指定する</li>
<li>ディスパッチする( URL解析によって得られたコントローラに以降の処理を委託する )</li>
</ol><table width="625" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);"><?php</td>
<td style="background-color:rgb(204,255,255);"><font size="2"> </font><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font><font size="2">説明</font><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">require_once
'Zend/Controller/Front.php';</td>
<td style="background-color:rgb(204,255,255);"><font size="2">Zend_Controllerのコンポーネントをロード</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">$front =
Zend_Controller_Front::getInstance();</td>
<td style="background-color:rgb(204,255,255);"><font size="2">フロントコントローラのインスタンスを取得</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$front->setParam('noViewRenderer', true);</td>
<td style="background-color:rgb(204,255,255);"><font size="2">自動レンダリングモードを無効</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$front->setControllerDirectory('../application/controllers');</td>
<td style="background-color:rgb(204,255,255);"><font size="2">コントローラディレクトリのパス指定</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">$front->dispatch();</td>
<td style="background-color:rgb(204,255,255);"><font size="2">コントローラのディスパッチを実行</font></td>
</tr></tbody></table><p> dispatch()メソッドは、前述のURL解析により、デフォルトコントローラ、または指定されたコントローラに処理を委託します。<br />
上記の処理を一括して行う rum()メソッドもあります。</p>
<table width="621" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(192,192,192);"><td><?php</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>require_once 'Zend/Controller/Front.php';</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>Zend_Controller_Front::getInstans()->setParam('noViewRenderer',
true);</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>Zend_Controler_Front::run('../application/controllers');</td>
</tr></tbody></table><p>
run()メソッドを使用することにより、インスタンスの取得・コントローラディレクトリの指定・ディスパッチを一気に行うことができるので、こちらの方が単純です。</p>
<p>ここで重要になってくるのは、自動レンダリングを無効にするか有効にするかです。<br />
$front-><strong><font color="#FF0000">setParam('noViewRenderer',
true);</font></strong><br />
この部分ですが、ここではすべて無効にしています。デフォルトでは有効になっているので、有効として使用する場合には、$front->setParam('noViewRenderer',
true);、の記述は必要ありません。<br />
ZendFrameworkでは、<font color="#000000">自動レンダリングモードを有効</font>にすることを推奨しています。</p>
<p>自動レンダリングモードを有効にすると、必ずビュースクリプトが必要になり<br />
(<font color="#0000FF">application/views/scripts/コントローラ名/アクション名.phtml</font>)このファイルを読み込み画面出力するので、MVCモデルを採用して作成しなければなりません。</p>
<p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">レスポンスオブジェクト</font></p>
<p> レスポンスオブジェクトとは、データの出力を担当します。<br />
ここで重要なのは、<font color="#000000">自動レンダリングモードを有効</font>にした場合には、レスポンスオブジェクトは使用できず、必ずビュースクリプトが必要になる点です。<br />
MVCモデルで開発を行う際には、使用することはないと思いますが、一応メソッドの種類を説明します。</p>
<table width="601" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(204,255,204);">メソッド</td>
<td style="background-color:rgb(204,255,204);">概要</td>
</tr><tr><td>setHeader()</td>
<td>HTTPヘッダ情報を設定</td>
</tr><tr><td>setBody()</td>
<td>コンテンツ内容を設定</td>
</tr><tr><td>appendBody()</td>
<td>コンテンツ内容を追加</td>
</tr><tr><td>seneHeaders()</td>
<td>HTTPヘッダ情報を出力</td>
</tr><tr><td>outputBody()</td>
<td>コンテンツ内容を出力</td>
</tr><tr><td>sendResponse()</td>
<td>HTTPヘッダ情報とコンテンツ内容を出力</td>
</tr><tr><td>clearHeaders()</td>
<td>ヘッダ情報を消去</td>
</tr><tr><td>clearBody()</td>
<td>コンテンツ内容を消去</td>
</tr><tr><td>setRedirect()</td>
<td>リダイレクト情報を設定</td>
</tr></tbody></table><p> </p>
<p><br /><font size="4" color="#000080" style="background-color:rgb(255,204,153);">リクエストオブジェクト</font></p>
<p> リクエストオブジェクトとは、ブラウザからアクセスされた情報( GET POST Cookie
)や、コントローラ間でやり取りする情報を操作する役割を担っています。<br />
ZendFrameworkでは、これらのスーパーグローバル変数ではなく専用のメソッドを使用するルールになっています。</p>
<table width="597" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(204,255,204);">対象データ</td>
<td style="background-color:rgb(204,255,204);">スーパーグローバル変数</td>
<td style="background-color:rgb(204,255,204);">対応メソッド</td>
</tr><tr><td>クエリストリング</td>
<td>$_GET</td>
<td>getQuery()</td>
</tr><tr><td>POSTデータ</td>
<td>$_POST</td>
<td>getPost()</td>
</tr><tr><td>Cookieデータ</td>
<td>$_COOKIE</td>
<td>getCookie()</td>
</tr><tr><td>サーバー変数</td>
<td>$_SETVER</td>
<td>getServer()</td>
</tr><tr><td>環境変数</td>
<td>$_ENV</td>
<td>getEnv()</td>
</tr></tbody></table><p> </p>
<p>sample</p>
<table width="629" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);"><?php</td>
<td style="background-color:rgb(204,255,255);">説明</td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$this->_getParam('food');</td>
<td style="background-color:rgb(204,255,255);">[ food ]の値を取得する</td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$this->_getAllParams();</td>
<td style="background-color:rgb(204,255,255);">すべてのパラメータを取得する</td>
</tr><tr><td style="background-color:rgb(192,192,192);"> </td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);">
<p>if ($this-><font color="#FF0000">_hasParam</font>('food')){</p>
</td>
<td style="background-color:rgb(204,255,255);">[ food ]パラメータが存在するかチェック</td>
</tr><tr><td style="background-color:rgb(192,192,192);"> echo '[ food ]の値は' .
$this->_getParam('food') . 'です。';</td>
<td style="background-color:rgb(204,255,255);"> [ food ]パラメータ出力</td>
</tr><tr><td style="background-color:rgb(192,192,192);">} else {</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);"> echo '[ food
]パラメータは存在しません。';</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);">}</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr></tbody></table><p> </p>
<p> </p>
<hr width="100%" size="2" /><hr width="100%" size="2" /><p> </p>
<h3>フロントコントローラ</h3>
<p> フロントコントローラとは、公開ディレクトリ上に置く1つだけのファイル[ index.php ]のことを言います。</p>
<ol><li>フロントコントローラのインスタンスを取得する</li>
<li>コントローラのディレクトリを指定する</li>
<li>ディスパッチする( URL解析によって得られたコントローラに以降の処理を委託する )</li>
</ol><table cellspacing="1" cellpadding="1" border="0" width="625"><tbody><tr><td style="background-color:rgb(192,192,192);"><?php</td>
<td style="background-color:rgb(204,255,255);"><font size="2"> </font><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font><font size="2">説明</font><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">require_once
'Zend/Controller/Front.php';</td>
<td style="background-color:rgb(204,255,255);"><font size="2">Zend_Controllerのコンポーネントをロード</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">$front =
Zend_Controller_Front::getInstance();</td>
<td style="background-color:rgb(204,255,255);"><font size="2">フロントコントローラのインスタンスを取得</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$front->setParam('noViewRenderer', true);</td>
<td style="background-color:rgb(204,255,255);"><font size="2">自動レンダリングモードを無効</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$front->setControllerDirectory('../application/controllers');</td>
<td style="background-color:rgb(204,255,255);"><font size="2">コントローラディレクトリのパス指定</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">$front->dispatch();</td>
<td style="background-color:rgb(204,255,255);"><font size="2">コントローラのディスパッチを実行</font></td>
</tr></tbody></table><p> dispatch()メソッドは、前述のURL解析により、デフォルトコントローラ、または指定されたコントローラに処理を委託します。<br />
上記の処理を一括して行う rum()メソッドもあります。</p>
<table cellspacing="1" cellpadding="1" border="0" width="621"><tbody><tr style="background-color:rgb(192,192,192);"><td><?php</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>require_once 'Zend/Controller/Front.php';</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>Zend_Controller_Front::getInstans()->setParam('noViewRenderer',
true);</td>
</tr><tr style="background-color:rgb(192,192,192);"><td>Zend_Controler_Front::run('../application/controllers');</td>
</tr></tbody></table><p>
run()メソッドを使用することにより、インスタンスの取得・コントローラディレクトリの指定・ディスパッチを一気に行うことができるので、こちらの方が単純です。</p>
<p>ここで重要になってくるのは、自動レンダリングを無効にするか有効にするかです。<br />
$front-><strong><font color="#FF0000">setParam('noViewRenderer',
true);</font></strong><br />
この部分ですが、ここではすべて無効にしています。デフォルトでは有効になっているので、有効として使用する場合には、$front->setParam('noViewRenderer',
true);、の記述は必要ありません。<br />
ZendFrameworkでは、<font color="#000000">自動レンダリングモードを有効</font>にすることを推奨しています。</p>
<p>自動レンダリングモードを有効にすると、必ずビュースクリプトが必要になり<br />
(<font color="#0000FF">application/views/scripts/コントローラ名/アクション名.phtml</font>)このファイルを読み込み画面出力するので、MVCモデルを採用して作成しなければなりません。</p>
<p><font color="#000080" size="4" style="background-color:rgb(255,204,153);">レスポンスオブジェクト</font></p>
<p> レスポンスオブジェクトとは、データの出力を担当します。<br />
ここで重要なのは、<font color="#000000">自動レンダリングモードを有効</font>にした場合には、レスポンスオブジェクトは使用できず、必ずビュースクリプトが必要になる点です。<br />
MVCモデルで開発を行う際には、使用することはないと思いますが、一応メソッドの種類を説明します。</p>
<table cellspacing="1" cellpadding="1" border="0" width="601"><tbody><tr><td style="background-color:rgb(204,255,204);">メソッド</td>
<td style="background-color:rgb(204,255,204);">概要</td>
</tr><tr><td>setHeader()</td>
<td>HTTPヘッダ情報を設定</td>
</tr><tr><td>setBody()</td>
<td>コンテンツ内容を設定</td>
</tr><tr><td>appendBody()</td>
<td>コンテンツ内容を追加</td>
</tr><tr><td>seneHeaders()</td>
<td>HTTPヘッダ情報を出力</td>
</tr><tr><td>outputBody()</td>
<td>コンテンツ内容を出力</td>
</tr><tr><td>sendResponse()</td>
<td>HTTPヘッダ情報とコンテンツ内容を出力</td>
</tr><tr><td>clearHeaders()</td>
<td>ヘッダ情報を消去</td>
</tr><tr><td>clearBody()</td>
<td>コンテンツ内容を消去</td>
</tr><tr><td>setRedirect()</td>
<td>リダイレクト情報を設定</td>
</tr></tbody></table><p> </p>
<p><br /><font color="#000080" size="4" style="background-color:rgb(255,204,153);">リクエストオブジェクト</font></p>
<p> リクエストオブジェクトとは、ブラウザからアクセスされた情報( GET POST Cookie
)や、コントローラ間でやり取りする情報を操作する役割を担っています。<br />
ZendFrameworkでは、これらのスーパーグローバル変数ではなく専用のメソッドを使用するルールになっています。</p>
<table cellspacing="1" cellpadding="1" border="0" width="597"><tbody><tr><td style="background-color:rgb(204,255,204);">対象データ</td>
<td style="background-color:rgb(204,255,204);">スーパーグローバル変数</td>
<td style="background-color:rgb(204,255,204);">対応メソッド</td>
</tr><tr><td>クエリストリング</td>
<td>$_GET</td>
<td>getQuery()</td>
</tr><tr><td>POSTデータ</td>
<td>$_POST</td>
<td>getPost()</td>
</tr><tr><td>Cookieデータ</td>
<td>$_COOKIE</td>
<td>getCookie()</td>
</tr><tr><td>サーバー変数</td>
<td>$_SETVER</td>
<td>getServer()</td>
</tr><tr><td>環境変数</td>
<td>$_ENV</td>
<td>getEnv()</td>
</tr></tbody></table><p> </p>
<p>sample</p>
<table cellspacing="1" cellpadding="1" border="0" width="629"><tbody><tr><td style="background-color:rgb(192,192,192);"><?php</td>
<td style="background-color:rgb(204,255,255);"><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font><font size="2">説明</font><font size="2">▼</font><font size="2">▼</font><font size="2">▼</font></td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$this->_getParam('food');</td>
<td style="background-color:rgb(204,255,255);">[ food ]の値を取得する</td>
</tr><tr><td style="background-color:rgb(192,192,192);">
$this->_getAllParams();</td>
<td style="background-color:rgb(204,255,255);">すべてのパラメータを取得する</td>
</tr><tr><td style="background-color:rgb(192,192,192);"> </td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);">
<p>if ($this-><font color="#FF0000">_hasParam</font>('food')){</p>
</td>
<td style="background-color:rgb(204,255,255);">[ food ]パラメータが存在するかチェック</td>
</tr><tr><td style="background-color:rgb(192,192,192);"> echo '[ food ]の値は' .
$this->_getParam('food') . 'です。';</td>
<td style="background-color:rgb(204,255,255);"> [ food ]パラメータ出力</td>
</tr><tr><td style="background-color:rgb(192,192,192);">} else {</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);"> echo '[ food
]パラメータは存在しません。';</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr><tr><td style="background-color:rgb(192,192,192);">}</td>
<td style="background-color:rgb(204,255,255);"> </td>
</tr></tbody></table><p> </p>
<p> </p>
<hr width="100%" size="2" /><hr width="100%" size="2" /><p> </p>
表示オプション
横に並べて表示:
変化行の前後のみ表示: