前回、
build.xmlの
gen-controllerを使ってコントローラーとビューを作成しました。まずは、これらの中身をチェックして、両者の基本的な仕組みから理解していくことにしましょう。
まずは、コントローラーです。下に、生成されたコントローラークラスのソースコードを掲載しておきます。ソースコードのポイントをまとめておきましょう。
●コントローラーは「controller」パッケージ内に作成される packageを見ると、
com.tuyano.libro.myslim3appというアプリケーションのルートパッケージ下に「
controller」というパッケージを用意し、そこにクラスが配置されていることがわかります。コントローラーは、このようにルートパッケージ下の
controller内に作成されるのが基本です。必要に応じて、この中に更にパッケージを用意し整理することもできます。
●org.slim3.controller.Controllerを継承するコントローラークラスは、Slim3に用意されている
Controllerクラスを継承します。これにより、このクラスがコントローラーとして機能するようになります。
●必ず「run」メソッドを実装するコントローラーには、
runというメソッドが1つだけあります。これが、そのコントローラーが呼び出された際に実行されるメソッドです。
■コントローラーとURLパスの関係
Slim3では、
gen-controllerでコントローラーを作成するとき、公開するURLパスを指定しました。そのパスに応じ、自動的にクラスが生成されました。Slim3では、コントローラーとURLパスは密接な関連があります。
ここではルート(/)にアクセスするコントローラーを作りました。
/というのは、要するに
/indexへのアクセスということですね。
/indexにアクセスすると実行されるコントローラーとして
IndexControllerが作られたわけです。非常にわかりやすいですね。
このように、コントローラーに設定されているアドレスにアクセスをすると、それに対応するコントローラー内の
runメソッドが呼び出される、という形でSlim3は機能します。ということは、つまり「1つのアドレスに対し1つのコントローラー」という形でコントローラーが作られることになります。
RailsタイプのようなMVCフレームワークの場合、1つのコントローラー内にいくつものアクションメソッドを実装して、「このアドレス下にアクセスした場合は全部このコントローラーが処理する」というような感じでまとめられていることが多いのですが、Slim3は「
1コントローラー=1アクション」です。1つのコントローラー内に、いくつものアクションを用意することはできません。
■Navigationとforward
さて、
runメソッドでは、「
Navigation」というクラスが返値に設定されています。これは、指定のビューへのナビゲーションを管理するクラスです。コントローラーの
runメソッドでは、最後にこの
Navigationインスタンスを返すことで、どのビューを表示させるかを指定することができます。
デフォルトでは、「
forward("index.jsp")」という文が書かれていますね。これにより、
index.jspにフォワードする
Navigationが作成され、返されていたわけです。
整理すると、Slim3のコントローラーは、「指定のアドレスにアクセスがあったら、
runで必要な処理を行ってから指定のビューにフォワードする」というものだ、と考えていいでしょう。非常にシンプルなしくみですね。