目次

Hello画面を作成する(アクション、ビュー、テンプレートを追加する)

実際のアプリケーション構築は、「アクション、(ビュー、) テンプレート」を追加していく作業の繰り返しとなります。

CRUD = アクション

"CRUD"というのを聞いたことがあるでしょうか?

Create, Read, Update, Delete の略です。 ウェブアプリケーションの仕事のほとんどは、この"CRUD"処理を行うことです。

ツイッターで例えると、

となります。

(ふぁぼるが"Create"なのに違和感があるかもしれませんが、"Favoritesというリソースを追加成する"と考えてください 。)

上記CRUDの各処理を、Ethnamでは「アクション」という言葉で表現します。 「作成アクション」「表示アクション」「更新アクション」「削除アクション」のような感じです。

Hello画面を追加してみる。

さっそく画面を追加してみましょう。

画面を作るには、まずアクション名を決める必要があります。 ここではアクション名をhelloとしましょう。

そうすると、URLは/?action_hello=trueとなります。

次に、アクションクラスファイル名は、app/actionに以下のような命名規則で作成します。

従ってファイル名はapp/action/Hello.phpとなります。

アクションクラスファイルの中身を書く

さて、ではクラスファイルapp/action/Hello.phpを作成してみましょう。

クラス名はSample_Action_Helloです。

<?php
class Sample_Action_Hello extends Ethna_ActionClass
{
    public function perform()
    {
        return 'hello';
    }
}

このクラスでは、サーバ側では何も処理を行わずに'hello'という遷移名を返しています。つまり

「なにもしないで'hello'という画面名を表示する」

という処理になります。

アクションクラスファイルを毎回1から手で書くのは面倒なので、ethnam-generatorコマンドのadd-actionオプションを利用して、ひながたを生成することも出来ます。

$ vendor/bin/ethnam-generator add-action hello

ビュークラスファイルの追加(省略可)

画面に何らかのパラメータを渡したい場合は、ビュークラスを作成することで実現できます。

'hello'という遷移名に対応するビュークラスファイルは、アクションクラスと同様にapp/viewに以下のような命名規則で作成し

つまりhello画面に対応するビュークラスファイルはapp/view/Hello.phpとなります。

クラス名はSample_View_Helloとなります。

app/view/Hello.phpの中身を以下のように書きます。 ここでは、現在時刻をパラメータとして渡します。(setAppというのが画面にパラメータを渡すメソッドです。)

<?php
class Sample_View_Hello extends Ethna_ViewClass
{
    public function preforward()
    {
        $this->af->setApp('now', strftime('%Y/%m/%d'));
    }
}

preforward()メソッドはテンプレートのレンダリング前に呼び出され、テンプレートに任意のパラメータを渡すことが可能です。ここでは'now'という名前で現在時刻を渡しています。

ビュースクラスファイルを毎回1から記述するのは面倒なので、ethnam-generatorコマンドのadd-viewオプションを利用して、スケルトンファイルを生成することも出来ます。

$ vendor/bin/ethnam-generator add-view hello

この時に-tオプションをつける事によって、同時にテンプレートのスケルトンファイルが生成されます。

例:

$ vendor/bin/ethnam-generator add-view -t hello

また、ビュークラスが不要な場合(単純にテンプレートを表示したい場合等)は、ビュークラスの記述を省略することも可能です。

テンプレートファイルの作成

次に、テンプレートファイルを作成します。

テンプレートディレクトリは template/ja_JP なので、template/ja_JP/hello.tplを作成します。

Hello Ethnam<br />
current time: {$app.now}

実際には、毎回テンプレートを1から記述するのは面倒なので、ethnam-generatorコマンドのadd-template オプションを利用して、スケルトンファイルを生成することも出来ます。

$ vendor/bin/ethnam-generator add-template hello

以上でアクション、ビュー、テンプレートの追加は完了ですので、実際にアクセスして動作を確認します。

http://localhost:8000/?action_hello=true

Hello画面が表示されれば成功です。

(参考)テンプレートにパラメータを渡す

上記のとおり、アクションクラス、あるいはビュークラスで

$this->af->setApp('foo', 'bar');

として値を設定すると、テンプレート側で{$app.foo}として値を取得することができます。

Smartyの使い方についてはSmartyのドキュメントを見てください。 (なお、Ethnamがサポートしているのは今のところSmarty 2のみです。v3はサポートしていません。)

(参考)アクションとビューの内部的な動作

Ethnamのコントローラ、アクション、ビューは、以下のように動作します。