2013年12月19日木曜日

RIsolutoのコードを読む その4 | Risoluto@アドベント・ぼっち・カレンダー:14日目

ABC(*1)の14日目。共通テーマは私が開発している「Risouto」についてです。



ユーザアプリケーションの作り方


さて、前回まではユーザアプリケーションを呼び出すまでの流れをRisolutoのコードを読み進めながら見ていったわけですが、じゃあそのユーザアプリケーション側ではどういうかんじなのかというのを見ていくことにしましょう。……今までさんざん見ただろというアレはあるんだけども、あらためて。

ってことで、まあとりあえず「Top.php」を見てみましょう。この中に必要なエッセンスが全部詰まってる感じになりますので。

<?php
/**
 * Top
 *
 * デフォルト画面を実現するためのクラス
 *
 * @package       risoluto
 * @author        Risoluto Developers
 * @license       http://opensource.org/licenses/bsd-license.php new BSD license
 * @copyright (C) 2008-2013 Risoluto Developers / All Rights Reserved.
 */

//------------------------------------------------------//
// 名前空間の定義
//------------------------------------------------------//
namespace RisolutoApps;

//------------------------------------------------------//
// クラス定義
//------------------------------------------------------//
class Top extends \Risoluto\RisolutoControllerBase
{
    /**
     * Play()
     *
     * 主処理を行う
     *
     * @access    public
     *
     * @param     void なし
     *
     * @return    void    なし
     */
    public function Play()
    {
        // ヘッダ情報のセット
        $header = $this->GetDefaultHeader();

        $header['robots'] = 'noindex,nofollow';

        // テンプレートエンジン関連の処理
        $smarty = $this->InitTemplate();
        $this->AssignTemplate($smarty, array('header' => $header));
        $this->DispTemplate($smarty, str_replace(array(__NAMESPACE__, '\\'), '', __CLASS__) . '.tpl');

        return true;
    }
}

いつぞやのポストで必須メソッドが4つある……的なエントリを書きましたが、ここには「Pray()」メソッドしか存在しませんね。そうなんです。特定の条件を満たせば「Pray()」メソッドだけあれば十分なんです。

RisolutoControllerBaseクラスを継承しとけば無問題


そう、その「特定の条件」ってやつのひとつが「RisolutoControllerBaseクラスを継承すること」って奴なんです。このクラスの中に必要なブツが全部用意されているのです。

例えば、必須クラスである「Init()」、「Error()」、「Clean()」はこんな感じで用意されていたりします。

    /**
     * Init($param = array())
     *
     * 初期化処理を行う
     *
     * @access    public
     *
     * @param     array 当該クラスに関するパラメタ情報
     *
     * @return    void     なし
     */
    public function Init($param = array())
    {
        // 取得したパラメタをクラス変数にセットする
        $this->__param = $param;

        return true;
    }

    /**
     * Error()
     *
     * エラー処理を行う
     *
     * @access    public
     *
     * @param     object エラーオブジェクト
     *
     * @return    void      なし
     */
    public function Error($errobj = null)
    {
        return true;
    }

    /**
     * Clean()
     *
     * 後処理を行う
     *
     * @access    public
     *
     * @param     void なし
     *
     * @return    void    なし
     */
    public function Clean()
    {
        return true;
    }

「用意されている」といっても、まあ単にメソッドがそこにある以上の意味はないんですが、ちょっとしたものなら細かいことをキニシナイでコーディングできるわけですね。必要ならこれらをオーバーライドすればいいってことです。はい。

「Pray()」メソッドについてもHTTPメソッド毎にコールされるメソッドを別にできる……的な話も書きましたが、そう言ったのもこんな感じで用意されています。

    /**
     * PlayPost()
     *
     * POSTメソッドでアクセスされた際の主処理を行う
     *
     * @access    public
     *
     * @param     void なし
     *
     * @return    void    なし
     */
    public function PlayPost()
    {
        $this->Play();

        return true;
    }

結局の所「Pray()」メソッドをコールしているだけなのですが、まあ特定のHTTPメソッドのときだけ他のことやりたいなら、そいつだけオーバーライドしてやればOKってノリです。便利……だよね……(´・ω・`)

と、まあ今回はこの辺で。明日はテンプレート周りのメソッドを見てみようかと思います。


*1:アドベント・ぼっち・カレンダーの意

0 件のコメント:

コメントを投稿