前回はエラー画面を表示させる仕組みを加えました。
と同時に日本語文字をビュー変数にセットして表示させるやり方、ビュースクリプトで$this->escape()メソッドを使ったサニタイズも行いました。
これでやっとアプリケーション開発へ進んで行けそうです。

では一気に世界を広げていきましょう!!

これまでトップページのみを使って作ってきました。
トップページ以外を作るのは特別なことではなく、それと同じやり方になります。

そこでこれまで作ってきたトップページを整理しましょう。
1.「アクションコントローラ」作成
application/controllers/直下にIndexController.phpファイルを作成しました。
このファイルにIndexControllerクラスを定義しました。
クラス内にはindexActionメソッドを用意しました。

2.「ビュースクリプト」作成
application/views/scripts/index/直下にindex.phtmlファイルを作成しました。
このファイルにページの雛形を書きました。


以上のようにしてトップページが作成できたわけです。
目に付くのは、やたらindexというフレーズがあることです。

実はこの「index」というのはこれまで適当に使ってきたわけではなくて、「命名規則」に沿って書いていたものでした。
「index」はデフォルトに割り当てられてることもあり、トップページ作成のためにindexを使ってきたことになります。

それでは「命名規則」をまとめます。

1.「アクションコントローラ」作成
application/controllers/{コントローラ名}Controller.phpファイル作成
このファイルに{コントローラ名}Controllerクラスを定義
クラス内には{アクション名}Actionメソッドを用意

2.「ビュースクリプト」作成
application/views/scripts/{コントローラ名}/{アクション名}.phtmlファイル作成
このファイルにページの雛形を書く


ページに結びついてる名前は「コントローラ名」「アクション名」の2つであることが分かります。
クラス名は英大文字から始めるルールに従って、FooControllerのようになります。
クラス名とそのクラスが定義されたファイル名は一致させるようにします。
なのでファイル名頭も英大文字で始まります。

以上のことからトップページは「コントローラ名」がindex、「アクション名」もindexだったことなります。

これまでトップページにアクセスするためにベースURLを見ていました。
http://localhost/

これに「コントローラ名」を指定してアクセスすると
http://localhost/index

さらに「アクション名」も指定してアクセスすると
http://localhost/index/index


つまりベースURLへアクセスした時は「コントローラ名」も「アクション名」も指定されなかった為に、コントローラ名・アクション名両方ともデフォルト値のindex扱いになりページを見ることができたわけです。

ではトップページ以外だとどんなアクセスが考えられるでしょうか?

【ケース1】
まず「コントローラ名」はindexで、「アクション名」がindex2の場合が考えられます。
この場合、以下のようにアクセスします。
http://localhost/index/index2


【ケース2】
次は「コントローラ名」がfooで、「アクション名」がbarの場合が考えられます。
http://localhost/foo/bar


【ケース3】
その他「コントローラ名」がfugaで、「アクション名」がindexの場合が考えられます。
http://localhost/fuga/index

またはindexは省略しても補完されるので
http://localhost/fuga


それではケース1~3の「アクションコントローラ」と「ビュースクリプト」を作成してみましょう。

【ケース1】
アクションコントローラ - IndexController.php
<?php
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action
{
  public function index2Action() {

  }
}

IndexControllerクラスにindex2Action()メソッドがあります。
今後は上記形式をIndexController::index2Action()のように記述していきます。

ビュースクリプト - index/index2.phtml
<html>
<body>
  <h3>コントローラ名とアクション名</h3>
  <p>index, index2</p>
</body>
</html>


【ケース2】
アクションコントローラ - FooController.php
<?php
require_once 'Zend/Controller/Action.php';

class FooController extends Zend_Controller_Action
{
  public function barAction() {

  }
}

FooController.phpファイルを用意してそこにFooController::barAction()を定義

ビュースクリプト - foo/bar.phtml
<html>
<body>
  <h3>コントローラ名とアクション名</h3>
  <p>foo, bar</p>
</body>
</html>


【ケース3】
アクションコントローラ - FugaController.php
<?php
require_once 'Zend/Controller/Action.php';

class FugaController extends Zend_Controller_Action
{
  public function indexAction() {

  }
}

FugaController.phpファイルを用意してそこにFugaController::indexAction()を定義

ビュースクリプト - fuga/index.phtml
<html>
<body>
  <h3>コントローラ名とアクション名</h3>
  <p>fuga, index</p>
</body>
</html>


どうでしょうか?
このページ作成のルールが分かれば、無尽蔵にページを増やしていけそうです。
まさに世界が広がったと言えるんじゃないでしょうか。


もう1つ書いておきます。

「コントローラ名」って何?
「アクション名」って何?
ってなると思います。

私が思うに、、、
1つのアプリケーションを作成していく際にapplicationディレクトリに階層で整理して作っていきます。
アプリケーションに持たせる機能を大分類するといくつかに分けることができる場合があります。この大分類ごとに別のアクションコントローラに分けて作成します。
その時に割り当てた名前が「コントローラ名」ということになります。

また、1つのアクションコントローラには同じ大分類に属するページ処理(アクションメソッド)を書いていくことになります。
このメソッドに割り当てた名前が「アクション名」ということになります。

なので「コントローラ」と「アクション」は1対多の関係になります。

なので以下のように階層分けできることになります。
コントローラ1/
    ├ アクション1
    └ アクション2

コントローラ2/
    ├ アクション1
    ├ アクション2
    └ アクション3


1つのアプリケーションのコントローラ数は大分類した数だと考えると、大規模システムでもそれほど多数にはならないでしょう。
なのでapplication/controllers/直下にアクションコントローラを置くのがシンプルで分かりやすいわけです。

一方、ビュースクリプトの場合はapplication/views/scripts/直下に「コントローラ名」でディレクトリ分けすることでファイルが膨大になっても管理しやすいわけです。