コントローラの作成 | Controller & Action

リクエストURL、そしてルーティング設定によって、実行されるモジュール・コントローラ・アクションが決定されます。決定されたモジュール/コントローラによるクラス名とファイル位置の例を下記に示します。

モジュール/コントローラ ファイルパス クラス名
index/index app/index/controllers/Index.php Index_Controllers_Index
index/fooBar app/index/controllers/FooBar.php Index_Controllers_FooBar
manage/main app/manage/controllers/Main.php Manage_Controllers_Main
manage/fooBar app/manage/controllers/FooBar.php Manage_Controllers_FooBar
例えば作成するアプリケーションが日記と掲示板機能を持つなら、DiaryコントローラとBbsコントローラがあるかもしれません。
また、コントローラが大きくなりすぎるのであれば、Diaryコントローラを表示関連のアクションを持つものと、投稿・編集・削除など管理関連のアクションを持つ2つのコントローラに分けても良いでしょう。

アクションとはコントローラ内のpublicなメソッドのことであり、ユーザの入力を受け付ける窓口のようなものです。下記は非常にシンプルなアクションとビュー(テンプレート)の実装例です。
app/index/controllers/Index.php

<php

class Index_Controllers_Index extends Sabel_Controller_Page
{
  public function index()
  {
    $this->inputValue = $this->request->fetchGetValue("input");
  }
}
app/index/views/index/index.tpl

<p>
  <?php if (is_empty($inputValue)) : ?>
    値が入力されませんでした。
  <?php else : ?>
    入力された値は「<?php echo h($inputValue) ?>」です。
  <?php endif ?>
</p>
http://.../index/index?input=test のようにアクセスすれば、"入力された値は「test」です。" と表示されます。

また、protected, private なメソッドを作成し、コントローラ内で共通のロジックをそれに集約することができます。public以外のメソッドはアクションとして扱われないため、外部から実行することはできません。
class Index_Controllers_Index extends Sabel_Controller_Page
{
  public function myAction1()
  {
    $this->commonLogic();
  }
  
  public function myAction2()
  {
    $this->commonLogic();
  }
  
  protected function commonLogic()
  {
    // 共通の処理
  }
}

上記のコントローラにおいて、/index/myAction1 や /index/myAction2 でアクセスされた時は各アクションが実行されますが、/index/commonLogic にアクセスしてもcommonLogic()メソッドが実行されることはありません。