====== AlController詳説 ======
===== アクション =====
アクションとは、コントローラが外部に公開しているひとかたまりの機能です。ユーザーがwebブラウザ等でアプリケーションの機能にアクセスする場合はアクションが最小単位となります。
Aloneにおいては、AlController上のパブリックメソッドとして定義された、名前がaction_で始まるメソッドがアクションとなります。メソッド名からaction_をのぞいた部分がアクションの名前です。一つのコントローラ上で、複数のアクションを定義することができます。
===== 呼び出されるアクションの決定 =====
アプリケーションを実行する際、どのコントローラを呼び出すか、そして指定されたコントローラ内のどのアクションを呼び出すのかはURL内に記述したctrlパラメータおよびactionパラメータで決まります。
URLは次の形式をとります。
http://www.example.com?ctrl=CONTROLLER_NAME&action=ACTIONNAME
リクエストはAlControllerクラスによって解析され、URL内のctrlパラメータで指定したコントローラ内のactionパラメータで指定されたアクションが実行されます。なお、ctrlパラメータおよびactionパラメータはいずれも省略可能です。省略した場合、デフォルトコントローラおよびデフォルトアクションが指定されたことになります。
^ ctrlパラメータ ^ actionパラメータ ^ 動作 ^
| 有り | 有り | 指定コントローラの指定アクションを実行 |
| 有り | 無し | 指定コントローラのデフォルトアクション(action_index)を実行 |
| 無し | 有り | デフォルトコントローラの指定アクションを実行 |
| 無し | 無し | デフォルトコントローラのデフォルトアクションを実行 |
===== コントローラの作成 =====
アプリケーションでコントローラを作成するには、まずコントローラ用のディレクトリを作成します。このディレクトリの名前がコントローラの名前として扱われます。そのディレクトリ中にmain.rbというファイルを作成します。これがコントローラ本体です。
main.rbの中では、アクションに対応するメソッドを既存のAlControllerクラスに追加します。既存のAlControllerへのメソッドの追加は、Rubyのオープンクラスと呼ばれる機能によって行われます。
# コントローラ内で使用するライブラリを読み込む
require 'al_template'
# Rubyのオープンクラス機能をにより既存のAlControllerにメソッドを追加
class AlController
# アクションとして公開するメソッドの名前は必ず action_ から始まる。
# このメソッドでは index というアクションを定義している。
def action_index()
@my_message = "HELLO world."
AlTemplate.run( 'index.rhtml' )
end
end
===== ステート =====
AlControllerは、ステートと呼ばれる特殊な変数が利用できます。ステートを利用すると、現在のステートの値とURL内で指定されたアクションの組み合わせによって呼び出されるアクションが決定します。開発者があらかじめ想定した順序以外でアクションが呼び出されることを防ぐことができます。
===== コントローラローカルセッション変数 =====
セッション変数とはHTTPリクエストをまたがって値を保持することができる変数です。コントローラローカルセッション変数は、個々のコントローラ内でのみ有効なセッション変数です。異なるコントローラからはアクセスできません。一つのアプリケーション内でグローバルにアクセスできるAlSessionによるセッション変数とは異なり、スコープがコントローラ内のみに限定されます。他のコントローラと名前がぶつかることを心配する必要がありません。
コントローラローカルセッション変数に対してオブジェクトを設定したり取り出したりするには、以下のように、Hashクラスにおける値の設定・取得と同様の文法を試用します。設定するオブジェクトはRubyの組み込みクラスのみとしてください。そのほかのオブジェクトを設定した場合の動作は保証されません。
# 値の設定
session[:NAME] = value
# 値の取得
value = session[:NAME]