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 RisolutoRisolutoControllerBase { /** * 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:アドベント・ぼっち・カレンダーの意