Ethna

Table Of Contents

Previous topic

リファレンス

Next topic

authenticate()

This Page

ActionClass

EthnaActionClass (アクションクラス) は MVC モデルでいうところの C (Controller) の一部です。

ユーザのリクエストによってアプリケーションが起動され、指定されたアクションが実行されます。アクションでは、ロジックの呼び出しを (場合によっては複数回) 行い、遷移先 (ViewClass) の決定をします。

アクションの仕組み

ActionClass の決定は、デフォルトでは、次のようなルールで行われます。 ( UrlHandler を使ったり、 アクション名の決定方法を変更する などによって変更できます)

  1. フォーム名のうち、名前が action_ で始まり、且つフォーム値が空ではないものを探します
  2. 1.に該当するフォーム名が見つかった場合、そこから先頭の action_ を除いた部分をアクション名とします

例えば、

http://example.com/?action_sample=true

という URL にアクセスされた場合、決定されるアクション名は Sample となります。

アクションは、主に次の役割を持っています:

  • フォーム値のバリデーションを実行し、エラーなどがあった場合に遷移先 (ViewClass) を決定する
  • ロジックの呼び出しを行い、遷移先 (ViewClass) を決定する

アクションの生成

ActionClass は、 ethnaコマンド を用いて次のように生成します。

$ ethna add-action sample

このとき、

このコマンドによって、次にようにファイルが生成されます。

$ ethna add-action sample

すると、次のように出力され、 app/action/Sample.php ファイルが生成されます。

file generated [/path/to/sample/skel/skel.action.php -> /path/to/sample/app/action/Sample.php]
action script(s) successfully created [/path/to/sample/app/action/Sample.php]

生成されたファイルには、指定した ActionClass と、対になる ActionForm が定義されます。アクション名とファイルは次のように、 _ 区切りがディレクトリ区切りに対応します。

アクション名 ファイル クラス名
index app/action/Index.php Sample_Action_Index
post_confirm app/action/Post/Confirm.php Sample_Action_PostConfirm
post_do app/action/Post/Do.php Sample_Action_PostDo

参考:

ActionForm には、次の 2 つのメソッド prepare()preform() が定義されます。

class Sample_Action_Sample extends Sample_ActionClass
{
    public function prepare()
    {
    }

    public function perform()
    {
        return 'sample';
    }
}

prepare()

prepare() は、フォームの検証などを行う、 perform() メソッドを実行する準備をするためのメソッドです。何事もなければ null を返し (あるいは return を省略し)、バリデーションの結果エラーが存在する場合には、遷移名を return することで、 perform() メソッドを実行せずに、任意の ViewClassTemplate に遷移させることができます。

次の例では、フォーム値を検証し ($this->af->validate())、エラーが1つ以上ある場合、 error という名前の遷移先に遷移するよう、 'error' という文字列を return しています。

public function prepare()
{
    if ($this->af->validate() > 0) {
        return 'error';
    }
}

prepare() メソッドと preform() メソッドの関係は以下のようになっていて、まず prepare() メソッドが呼ばれ、 prepare() メソッドが null を返した場合のみ perform() メソッドが呼び出されます。

../_images/reference_action-01.png

要するに、 prepare() メソッドでフォーム値の検証を行うこと、 perform() メソッドでは全てのデータがバリデート済みであるという前提で処理を行うことが出来、安全且つ簡潔なコードが書けるというわけです。

なお、フォーム値の自動検証詳細については以下をご覧下さい。

perform()

perform() メソッドは、ロジックを処理するためのメソッドです。

遷移先

遷移先とは、アクション実行後に呼び出される ViewClass (または Template) のことです。

ActionClass では、ここで説明した prepare() メソッド、 perform() メソッドと、 authenticate() の頁で説明する authenticate() メソッドの戻り値が遷移名となり、この遷移名に該当する ViewClassTemplate が呼び出されます。

注意すべきこと

すでに説明したとおり、 EthnaActionClas は、コントローラの一部です。

Ethna による開発でのよくある間違いは、 ActionClasspreform() などに、非常に大きな・複雑なロジックを書いてしまうことです。肥大化した ActionClass は、アプリケーションの見通しを悪くし、メンテナンス性を著しく悪化させます。ロジックは AppManagerAppObject に記述します。

参考: