2.アクション、ビュー、テンプレートの作成と処理の流れ

実際のアプリケーションの作成に入る前に、アクション、ビュー、テンプレートを作成してみましょう。

このページでの目標

  1. ブラウザからアクセスされてから Envi でアプリケーションが起動し、HTMLが出力されるまでの流れを知る
  2. アクション、ビュー、テンプレートの役割を知る

モジュール、アクション、ビュー、テンプレートの作成

ここでは、下記URLでアクセスすると、画面にHello Envi Worldが表示されるようにします。

http://bbs.example.jp/bbs.php/hello/index

やるべきことは3つです

  1. helloモジュールの追加
  2. indexアクションの追加
  3. indexビューの追加

envi コマンドを使ってそれぞれのひな形を作成します。 空のテンプレートのクション作成時に作成されますが、今回はそれに、ひな形をコピーします。

envi init-module bbs hello
envi init-action bbs hello index success
envi init-view bbs hello index
cat libs/envi3/work/base_php_template.tpl > apps/bbs/modules/hello/templates/index.tpl

このコマンドにより、ひな形から、hello という名前のモジュールと、 indexという名前のアクション、ビュー、テンプレートが作成されます。 これで、 /bbs.php/hello/index でアクセスができるようになっているはずです。 ブラウザからアクセスして確認してみましょう。

Envi PHP における処理の流れ

Envi PHPの処理を大雑把に説明すると、こんな感じになります。

http://www.enviphp.net/img/usecase1.png

フィルター⇒アクション⇒ビュー⇒レンダラー⇒フィルタ

アクションの確認

作成された Hello アクションファイル apps/bbs/modules/hello/actions/indexAction.class.php を開いてみましょう。 次の様にクラス、 indexAction が作成されているはずです。 (コメント等は省略しています)。


<?php
class indexAction extends helloActions
{

    public function 
initialize()
    {
        return 
true;
    }


    public function 
shutdown()
    {
        return 
true;
    }


    public function 
validate()
    {
        
$validator validator();

        
$res $validator->executeAll();
        if (
$validator->isError($res)) {
            return 
false;
        }
        return 
true;
    }


    public function 
execute()
    {
        return 
Envi::SUCCESS;
    }


    public function 
defaultAccess()
    {
        return 
Envi::DEFAULT_ACCESS;
    }


    public function 
handleError()
    {
        return 
Envi::ERROR;
    }


    public function 
isSecure()
    {
        return 
false;
    }

    public function 
isPrivate()
    {
        return 
false;
    }


    public function 
isSSL()
    {
        return 
false;
    }

}

indexAction

このクラスは、 アクションクラス(アクションコントローラ) です。hello/indexアクションの実装、遷移先(ビュークラス)の決定をします。 execute()defaultAccess()handleError()のreturn は、ビュークラスのファイル名にあたります。
execute()で、Envi::SUCCESS;が返ることによりindexView_success.class.phpが実行されることを表します。

  • 実行できるかどうかの判定

    • isSecure
      User::isLogin()がtrueの場合のみ実行するかどうか。
      return true;で、User::isLogin()の判定を行う。
    • isPrivate
      Controller::forward()かアクションチェインでのみ実行されるアクションかどうか。
      return true;の場合、制限がかかる
    • isSSL
      SSLでのアクセスのみ実行されるアクションかどうか。
      return true;の場合、制限がかかる
  • 実処理

    • initialize
      初期化処理。実行できるかどうかの判定のあと、最初に実行される。
      falseを返すと、そこでそのアクションは処理を終了しビューも実行されない。
    • validate
      アクションクラスの中にあるこのメソッドでは、フォームの値の検証 (Validation) や、フォームの準備をする役割があります。 返り値によって、その後、executedefaultAccesshandleErrorのどれかが実行されます。
    • execute
    • defaultAccess
    • handleError validate()Envi::ERRORもしくはfalse

    • shutdown 終了処理。Viewに移る前に実行される。
      falseを返すと、そこでそのアクションは処理を終了しビューも実行されない。

ビューの確認

続いて、ビュークラス apps/bbs/modules/hello/views/indexView_success.class.php を確認してみましょう。


<?php

class indexView extends helloViews
{

    public function 
execute()
    {
        
$parameter Request::getAttributeAll();
        
$this->display($parameter);
    }

}

indexView

このクラスは、 ビュークラス です。
hello/indexViewにおける表示項目の設定などを行います。
その他にも、HTTPヘッダの設定やテンプレートの設定などの役割もあります。
デフォルトでは、Request::setAttribute()された値のすべてを、 テンプレート内変数として定義しています。

アクションクラスで返された値に応じて、

  • indexView_commit.class.php
  • indexView_confirm.class.php
  • indexView_default.class.php
  • indexView_error.class.php
  • indexView_success.class.php

のどれかのファイルがロードされます。

  • execute()
    hello/indexViewにおけるビューの実装はこのメソッドにします。

テンプレートの確認

続いて、テンプレート apps/bbs/modules/hello/template/index.tplを確認してみましょう。
確認できたでしょうか?
デフォルトでは、PHPRendererを使用しているため、

cat <EnviPHPのインストールディレクトリ>libs/envi3/work/base_php_template.tpl > apps/bbs/modules/hello/templates/index.tpl

で作成されたタダのhtmlが記述されているかと思います。


大まかな処理の説明はこれで終わりです。 これからアプリケーションの実装を行っていきます。 3.アプリケーションの実装 へ進んでください。