アクションコントローラとビューの関係

URLとファイル
アクションからテンプレートへの値の渡し方
URLパラメータの受け渡し
GETリクエスト・POSTリクエストの使用

まず基本的な構成は次の図のようになっています。

URLとファイル

ブラウザからアクセスするときには次のようになります。

http://127.0.0.1/[コントローラ名]/[アクション名]
または
http://127.0.0.1/[コントローラ名]/[アクション名]/

ここでコントローラ名およびアクション名を省略すると、デフォルトコントローラ(index)、デフォルトアクション(index)が選択されます。
コントローラを省略して、アクションを指定することはできません。

アクセスされるファイルは下記のようになります。

─ application
 ├ controllers
 │├ IndexController.php
 │├ ErrorController.php
 │└ [コントローラ名(先頭1文字は大文字)]Controller.php
 └ views
  └ scripts
   ├ [コントローラ名]
   │├ index.phtml
   │└ [アクション名].phtml
   ├ error
   │└ error.phtml
   └ index
    ├ index.phtml
    └ [アクション名].phtml

controllersは機能、viewsは表示するテンプレートが置かれます。
アクションはController.phpの中の1つのメソッドとして記述されます。

これ以外にGETリクエストを使用せず、URLにパラメータを含めることもできます。
URLパラメータの受け渡し

アクションからテンプレートへの値の渡し方

アクションコントローラからテンプレート(ビュー)に値を渡すには、$this->viewを使用します。 アクション側で

$this->view->変数名 = 値;

のように指定すると、ビュー側では

$this->変数名

として値を受け取れます。

アクション [コントローラ名(先頭1文字は大文字)]Controller.php

<?php

class [コントローラ名(先頭1文字は大文字)]Controller extends Zend_Controller_Action
{
    public function [アクション名]Action()
    {
        $this->view->hoge = 'テスト';
    }
}

テンプレート(ビュー) [アクション名].phtml

<html>
<head>
<title>TEST</title>
</head>
<body>
<?php print($this->hoge); ?>
</body>
</html>

クロスサイドスクリプティング(CSS、XSS)対策のため 受け渡しする値をHTMLエスケープ(サニタイジング)を行うには、テンプレート側でZend_viewのescapeメソッドを使用します。

$this->escape($this->hoge)

URLパラメータの受け渡し

GETリクエストを使わず、URLにパラメータを含めることができます。

http://127.0.0.1/[コントローラ名]/[アクション名]/[パラメータ名1]/[パラメータ値1]/[パラメータ名2]/[パラメータ値2]/…

http://127.0.0.1/foo/boo/id/123/hoge/987

アクション内でgetRequest()を使用して、この値を受け取ることができます。

アクション内で使用するには、次のようにします。

$this->getRequest()->id

またビュー内でパラメータ名を指定して使用するには、アクションからビューにgetRequest()のまま渡し、ビュー内でパラメータ名を指定できます。

アクション内で次のようにすると

$this->view->params = $this->getRequest();

ビュー内では、次のようにして値を使用できます

$this->params->id

GETリクエスト・POSTリクエストの使用

アクション内でGETリクエストを受け取るには、次のようにします。

$this->getRequest()->getQuery('変数名')

アクション内でPOSTリクエストを受け取るには、次のようにします。

$this->getRequest()->getPost('変数名')

スーパーグローバル変数の$_REQUESTに相当するメソッドはgetParam()になりますが、$_REQUESTと違いcookieの値は含まれません。
また優先順位は、『URLパラメータ』>『GETパラメータ』>『POSTパラメータ』になります。

$this->getRequest()->getParam('変数名')

スポンサーリンク

関連記事

スポンサーリンク

実行中のメソッド名やクラス名を取得する方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る