Skip to content

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

EnviMVC edited this page Jul 12, 2012 · 9 revisions

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

このページでの目標

  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 における処理の流れ

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

http://www.five-foxes.com/man/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
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'views.class.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 libs/envi3/work/base_php_template.tpl > apps/bbs/modules/hello/templates/index.tpl で作成されたタダのhtmlが記述されているかと思います。


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