« ファイルを暗号化された経路で転送 バッチ編 | メイン | 仮想Windowsデスクトップ環境レンタル »

ethna

Ethna のアプリケーションマネージャ

Ethna 2.1.* まではコントローラへマネージャーを登録し
 'マネージャ名' => '表名',
なら、ActionClass や ViewClassの中では次のように使用。
 $this->マネージャー名->メソッド();
Ethna 2.5.0 では下記URL記載の理由
http://ethna.jp/ethna-document-dev_guide-appobj-manager.html#y9120283
で廃止され、ActionClass や ViewClassの中で必要になった時点で次のように使用。
 $m = $this->backend->getManager('表名');
 $m->メソッド();
あちこちに、この'表名'が散在し始めるので次のような試み。
データベースの items表 users表を、マネージャー mgrItems と mgrUsers で処理するシチュエーション。
コントローラー
class APPID_Controller extends Ethna_Controller{
        :
    var $manager = array(
        'mgrItems'=>'items',
        'mgrUsers'=>'users',
    );
アクションクラスの継承元
class APPID_ActionClass extends Ethna_ActionClass{
        :
    function newManager( $manager ){
        $c =& $this->backend->getController();
        $l = $c->getManagerList();
        if( isset( $l[$manager] ) ){
            $this->$manager =& $this->backend->getManager( $l[$manager] );
        }else{
            $this->backend->log( LOG_ERR, "No define APPID_Controller::manager('%s'=>'*')", $manager );
        }
    }
ビュークラスの継承元
class APPID_ViewClass extends Ethna_ViewClass{
        :
    function newManager( $manager ){
        $c =& $this->backend->getController();
        $l = $c->getManagerList();
        if( isset( $l[$manager] ) ){
            $this->$manager =& $this->backend->getManager( $l[$manager] );
        }else{
            $this->backend->log( LOG_WARNING, "No define APPID_Controller::manager('%s'=>'*')", $manager );
        }
    }


それぞれ、必要な箇所か、頻繁に使うマネージャーなら ActionClass と ViewClass の継承元のコンストラクタで
 $this->newManager( 'mgrItems' );
 $this->newManager( 'mgrUsers' );
などとすれば
 $this->mgrItems->メソッド()
 $this->mgrUsers->メソッド()
として使える。
●マネージャーを抽象的な名称にして、実ファイル名・DB表名などに非依存。
●newManager() は何度呼んでも1つだけのインスタンス。

トラックバック

このエントリーのトラックバックURL:
https://www.remix.asia/cgi/mt/mt-tb.cgi/6763

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)