Mach3.laBlog

はじめてのKohana (3) : コントローラ

この記事は賞味期限切れです。(更新から1年が経過しています)

「はじめてのKohana」の第三回目です。 前回ご紹介したコントローラをもう少し詳しく紹介します。

はじめてのKohana

コントローラファイル

まずはコントローラファイルのおさらいから。

Kohanaのコントローラは、命名規則に従ってクラス名やアクション名をつけ、 application/class/controller に格納する決まりとなっています。

例えば、あるコンテンツに /foo/bar でアクセスしたい場合。

class Controller_Foo extends Controller {
    ...
    public function action_bar(){
        // do something
    }
    ...
}

こんな内容を、application/classes/controller/foo.php に保存すればOKです。

パラメータを受け取る

動的なWebページを生成する為には、URLを介してパラメータを受け取るのが基本です。

他のWebアプリケーションフレームワーク同様、 クラス名・アクション名の後にパラメータを渡して それをコントローラ内で受け取る事が出来ます。

例えば、「記事の詳細をIDを渡して表示させるアクションを作る」場合。

/article/show/12345

このようにして記事のIDを3つ目のパラメータとして渡します。 このIDをコントローラ側で受け取るには、 $this->request->param($key) とします。

class Controller_Article extends Controller {
    ...
    public function action_show(){
        $id = $this->request->param("id"); // <= "12345"
        // id を元にして何かをする
    }
    ...
}

上のコードではparamメソッドの引数には”id”なる文字列が渡されていますが、 これはルーティングの設定でそのようなキーが設定されているためです。

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

ルーティングの設定は、bootstrap.php の最後に記載されています。 デフォルトでは下記コードのように、3つ目のパラメータが”id”とされている為、 paramメソッドで引っ張ってこれたわけです。

'(<controller>(/<action>(/<id>)))'

このルーティングは追加・編集する事で様々な事が実現できますが、 その話はまた別の機会に。

before / after

Kohanaのコントローラではコンスラクタは使用できません。(不可能ではないですが、推奨されません) その代替として、アクションメソッドの実行前後に処理されるbefore / after メソッドを使うことが出来ます。

before メソッド

アクションメソッドが実行される前に処理されます。

class Controller_Foo extends Controller {
    private $title = null;

    public function before(){
        $this->title = $this->request->controller() . " - " . $this->request->action();
    }

    public function action_index(){
        echo $this->title; // <= "foo - index"
    }
}

after メソッド

アクションメソッドが実行された後に処理されます。

下記はコントローラ名とアクション名から勝手にビューを出力してみる例。 fooコントローラのindexアクションの場合、ビューファイル “foo/index.php” を出力します。

class Controller_Foo extends Controller {
    ...
    public function after(){
        $name = $this->request->controller() . "/" . $this->request->action();
        $view = View::factory($name);
        $this->response->body($view);
    }
    ...
}

cf) Controllers | Kohana User Guide

まとめ

今回はKohanaのコントローラについて少し掘り下げました。 次回は、コントローラと切れない関係にあるルーティングの紹介をします。


» もくじ

  1. Hello World !
  2. コントローラとビューの基本
  3. コントローラ
  4. ルーティング
  5. ビュー
  6. モデルとデータベース
  7. バリデーション

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*