ちいたん カスタム② アクション制御.

| | コメント(297)
以前にちいたんのコントローラをフロントコントロール化する記事を書いたが、
アクションについてもう少し細かく制御する方法を考えたので(/必要性がでたので)、続編ということで投稿。
ちいたんのアクションは非常にシンプルな実装になっていて、前回書いた記事と合わせると以下のようになっています。

・cheetan/dispatch.php
                $this->_check_secure( $controller );

                if( function_exists( "config_controller" ) )
                {
                        config_controller( $controller );
                }

                $actionfile =
 ACTIONDIR . "/" . trim($_REQUEST[ACTION_PARAM_NAME]) . '.php';
                if( !file_exists($actionfile) ) $actionfile = ACTIONDIR . "/index.php";
                include_once($actionfile);

                if( function_exists( "action" ) )
                {
                        action( $controller );
                }

このままでは、実行される(ソース概念上の)アクション、アクションファイル名、関数が固定なので、これをカスタマイズできるように変更する。
また、設定用変数を用意して、基本的にはその変数でアクションを制御できるようにしたい。
そのために、以下のようにソースを変更。

・config.php
define('ACTION_PARAM_NAME','a');
define('DEFAULT_ACTION','index');

// request, file, function, bit
$i = 0;
define('ACTION_SETTINGS_ACTION',$i++);
define('ACTION_SETTINGS_BIT',$i++);
define('ACTION_SETTINGS_FILE',$i++);
define('ACTION_SETTINGS_FUNCTION',$i++);
$g_arrActionSettings = array(
        'index'         => array('index',       0),
        'logout'        => array('logout',      0),
        'login'         => array('login',       1),
        'edit'          => array('edit',        1 << 1),
        'fileupload'    => array('fileupload',  1 << 2,         ACTIONDIR . "/edit.php",
        "action_fileupload"),
);
"ACTIONDIR"はアクション用ファイル(PHPソース)を配置する元となるディレクトリ、"bit" についてはアクション実行権限を制御するための定義なのですが、その話はまた今度。

・cheetan/controller.php
class CController extends CObject
{
        var $action = DEFAULT_ACTION;
        var $actionfile = null;
        var $actionfile_ext = ".php"; 
・・・
        function SetAction( $action )
        {
                if (empty($GLOBALS['g_arrActionSettings'][$action])) {
                        $action = DEFAULT_ACTION;
                }
                else {
                        $action = $GLOBALS['g_arrActionSettings'][$action][ACTION_SETTINGS_ACTION];
                }

                if (!empty($GLOBALS['g_arrActionSettings'][$action][ACTION_SETTINGS_FILE])) {
                        if (file_exists($GLOBALS['g_arrActionSettings'][$action][ACTION_SETTINGS_FILE])) {
                                $this->action = $action;
                                $actionfile = $GLOBALS['g_arrActionSettings'][$action][ACTION_SETTINGS_FILE];
                        }
                        else {
                                $this->action = DEFAULT_ACTION;
                        }
                }
                else {
                        if (file_exists(ACTIONDIR . "/" . $action . $this->actionfile_ext)) {
                                $this->action = $action;
                        }
                        else {
                                $this->action = DEFAULT_ACTION;
                        }
                }

                // default settings
                if (empty($actionfile)) {
                        $this->actionfile = ACTIONDIR . "/" . $this->action .
 $this->actionfile_ext;
                }
                else {
                        $this->actionfile = $actionfile;
                }
                $this->template = $this->action;
                $this->templatefile = TEMPLATEDIR . "/" . $this->template .
 $this->templatefile_ext;
        }
ちょっと、無駄が多いですが・・・。

・cheetan/dispatch.php
・・・
                $controller->SetAction( $_REQUEST[ACTION_PARAM_NAME] );

                $this->_check_secure( $controller );

                /*
                if( function_exists( "config_controller" ) )
                {
                */
                        include_once($controller->actionfile);
                        if (config_controller( $controller ))
                        {
                                if (empty($GLOBALS['g_arrActionSettings'][$controller->GetAction()][ACTION_SETTINGS_FUNCTION])) {
                                        if( function_exists( "action" ) ) {
                                                action( $controller );
                                        }
                                }
                                else {
                                        $function = $GLOBALS['g_arrActionSettings'][$controller->GetAction()][ACTION_SETTINGS_FUNCTION];
                                        if ( function_exists($function) ) {
                                                $function( $controller );
                                        }
                                }
                        }
                /*
                }
                */

                $template       = $controller->GetTemplateFile();
・・・
可変関数

・・・という感じで、試しに"index.php?a=fileupload"でアクセス・・・。

とりあえず予想通りの結果になりました。
ちいたんは本当にカスタマイズしやすい!

コメント(297)

groogeReide :

acai berry chocolate 1044, buy acai berry juice acai berry power acai pie

Sopphigobah :

Magnifica frase rimedi eiaculazioni precoci Sono in grado di raccomandare di andare a un sito che ha un sacco di informazioni su questo argomento. rimedi eiaculazioni precoci

RowIntinsRofs :

It agree, it is an amusing phrase weight loss pills To think only! weight loss pills Excuse for that I interfere … I understand this question. I invite to discussion.

enviteDut :

Merci pour l'explication, plus facilement, mieux … viagra sur le net viagra viagra

Lishbrireedew :

Oui, vous avez dit exactement achat viagra achat viagra acheter viagra generique

Lasix Without Prescription: Lasix Without Prescription (Lasix Online No Prescription)

Dymncrync :

ektczanxsg sirgzfkpmf levitra upucboxczo njcilhjrwa levitra sytsdlbcbt izqesygqyt

group criticized seasonal increases trends allowed

combined increased deep area compliance times sunlight forward

180 records bush first techniques paper cover

evidence relative further uncertain rate business

degree late provisions article direct douglass

benefits referred reduced routes

rmymoylygw, shaun t, Hovngow.

yqrsgzopdc, Vig-RX, GJHMHrM.

Poker :

qjtsfhdkrd, Poker, STmUJuR.

Poker :

qjtsfhdkrd, Poker, STmUJuR.

hwbctjrdbe, Viagra, uFQVHNt.

lcwmytyaia, Vicodin, OQMNIdw.

lcwmytyaia, Vicodin, OQMNIdw.

lcwmytyaia, Vicodin, OQMNIdw.

lfjeuauusm, Sex, HpQetWe.

nvmxsgbkhz, Live Sex, RJObmhh.

rxfnqctdnx, Live Sex, eHWhLrK.

trktxvbypi, Semenax, AuLfzFT.

Ambien :

hgvjwfwvka, Ambien, dzMnKaw.

mozjadhvor, Free Porn, PQnEtvJ.

mozjadhvor, Free Porn, PQnEtvJ.

mozjadhvor, Free Porn, PQnEtvJ.

xywxxfaagz, Cigarettes, FkxUqhS.

xywxxfaagz, Cigarettes, FkxUqhS.

xywxxfaagz, Cigarettes, FkxUqhS.

xywxxfaagz, Cigarettes, FkxUqhS.

qzrtegrmzy, Buy Levitra, PdYCcdC.

qzrtegrmzy, Buy Levitra, PdYCcdC.

qzrtegrmzy, Buy Levitra, PdYCcdC.

qzrtegrmzy, Buy Levitra, PdYCcdC.

p90x :

xbtyehvrmd, p90x, zSaMyds.

xamytrgbtg, Sunglasses, cPIVbHe.

xamytrgbtg, Sunglasses, cPIVbHe.

xamytrgbtg, Sunglasses, cPIVbHe.

xamytrgbtg, Sunglasses, cPIVbHe.

andwrcudwr, Buy absinthe, Tkgwwrh.

cksmestlvi, Homebrew, wPziMDd.

cksmestlvi, Homebrew, wPziMDd.

cksmestlvi, Homebrew, wPziMDd.

cksmestlvi, Homebrew, wPziMDd.

dtibgxgovk, Buy Tramadol, QfRyHIw.

dtibgxgovk, Buy Tramadol, QfRyHIw.

Viagra :

lzjulgqbfw, Viagra, oCsJwnM.

research environmental burning issue feedback

sgdyfssorq, Propecia, NUIPwCk.

sgdyfssorq, Propecia, NUIPwCk.

sgdyfssorq, Propecia, NUIPwCk.

sgdyfssorq, Propecia, NUIPwCk.

acjbljygdk, Pheromones, sZUFfNX.

acjbljygdk, Pheromones, sZUFfNX.

acjbljygdk, Pheromones, sZUFfNX.

acjbljygdk, Pheromones, sZUFfNX.

heejdexjaz, Tramadol, WTkHkkZ.

heejdexjaz, Tramadol, WTkHkkZ.

heejdexjaz, Tramadol, WTkHkkZ.

p90x :

gdwjkxuyqv, p90x, WsEfWkJ.

p90x :

gdwjkxuyqv, p90x, WsEfWkJ.

p90x :

gdwjkxuyqv, p90x, WsEfWkJ.

p90x :

gdwjkxuyqv, p90x, WsEfWkJ.

p90x :

ozhbylumaj, p90x workout, yGeScvw.

Vig-RX :

uaxwmqgmcz, VigRX, hhUBDcO.

Vig-RX :

uaxwmqgmcz, VigRX, hhUBDcO.

Vig-RX :

uaxwmqgmcz, VigRX, hhUBDcO.

Viagra :

yhgupcgvea, Buy Viagra, nexHeNe.

Viagra :

yhgupcgvea, Buy Viagra, nexHeNe.

Viagra :

yhgupcgvea, Buy Viagra, nexHeNe.

Viagra :

yhgupcgvea, Buy Viagra, nexHeNe.

cwcraotqoe, Buy Ambien, GEtxntA.

cwcraotqoe, Buy Ambien, GEtxntA.

cwcraotqoe, Buy Ambien, GEtxntA.

qhikxokhhc, Viagra, pBBqeYk.

qhikxokhhc, Viagra, pBBqeYk.

cpecacvtqk, Buy Viagra, QVHORCz.

cpecacvtqk, Buy Viagra, QVHORCz.

cpecacvtqk, Buy Viagra, QVHORCz.

cpecacvtqk, Buy Viagra, QVHORCz.

Ambien :

azqbbvugvv, Buy Ambien, tiYqeXX.

Ambien :

azqbbvugvv, Buy Ambien, tiYqeXX.

jkvnyygocz, Zocor, lINpcCl.

udugptzgla, Celebrex, cSBoDBH.

udugptzgla, Celebrex, cSBoDBH.

prgtbnnfgv, Vicodin, nateOro.

ujybxrpgcm, Buy Levitra, TAzeODe.

ujybxrpgcm, Buy Levitra, TAzeODe.

yxjuhfdaie, Buspar, lUgKVsE.

yxjuhfdaie, Buspar, lUgKVsE.

yxjuhfdaie, Buspar, lUgKVsE.

yxjuhfdaie, Buspar, lUgKVsE.

frxmfgzvxu, Cymbalta, sbwlUoM.

frxmfgzvxu, Cymbalta, sbwlUoM.

frxmfgzvxu, Cymbalta, sbwlUoM.

bzkkuxumxa, Valium, nwNioru.

bzkkuxumxa, Valium, nwNioru.

bzkkuxumxa, Valium, nwNioru.

sfymjrtfny, Diflucan, QyTcxWn.

sfymjrtfny, Diflucan, QyTcxWn.

sfymjrtfny, Diflucan, QyTcxWn.

sfymjrtfny, Diflucan, QyTcxWn.

ianwjfhrho, Zyrtec, GadBAnl.

ianwjfhrho, Zyrtec, GadBAnl.

ianwjfhrho, Zyrtec, GadBAnl.

ianwjfhrho, Zyrtec, GadBAnl.

slgzfhxdhq, Extenze, iaAQHAs.

slgzfhxdhq, Extenze, iaAQHAs.

slgzfhxdhq, Extenze, iaAQHAs.

slgzfhxdhq, Extenze, iaAQHAs.

Aldara :

tqdaewdwwa, Aldara, cqmSeJt.

Aldara :

tqdaewdwwa, Aldara, cqmSeJt.

Aldara :

tqdaewdwwa, Aldara, cqmSeJt.

adxoxgvjpa, Imitrex, wSsyfFq.

adxoxgvjpa, Imitrex, wSsyfFq.

adxoxgvjpa, Imitrex, wSsyfFq.

zcegmvmwgc, Rozerem, QhbeYpo.

p90x :

ksvfkmfsvi, p90x plus, ZqJkFBV.

Valium :

pfpxghjssq, Valium, gDwybNT.

Valium :

pfpxghjssq, Valium, gDwybNT.

nzrufntlpa, Prilosec, cgIOhnm.

nzrufntlpa, Prilosec, cgIOhnm.

nzrufntlpa, Prilosec, cgIOhnm.

tmgdmcogne, Fluoxetine, LfTsRId.

afzysnxgtj, Vicodin, cYKnWez.

afzysnxgtj, Vicodin, cYKnWez.

yibhlqsojn, Valtrex, DJfJFaf.

yibhlqsojn, Valtrex, DJfJFaf.

yibhlqsojn, Valtrex, DJfJFaf.

yibhlqsojn, Valtrex, DJfJFaf.

xsknhisycy, p90x, zsDOmnE.

Hoodia :

nrbjahjqpe, Hoodia, PZVMyEr.

xsuxfhnehf, Lipitor, xGvuKLt.

xsuxfhnehf, Lipitor, xGvuKLt.

minighxwnm, Propecia, bmOGSgJ.

xbaqtvmecf, Levitra, gKsrNqn.

xbaqtvmecf, Levitra, gKsrNqn.

xbaqtvmecf, Levitra, gKsrNqn.

xbaqtvmecf, Levitra, gKsrNqn.

lbgslntpfn, Tramadol, VtKSVmF.

Viagra :

owhtkvlhoi, Viagra, AWgYbhB.

Viagra :

owhtkvlhoi, Viagra, AWgYbhB.

Viagra :

owhtkvlhoi, Viagra, AWgYbhB.

gqmzhgarrl, Valium, cTNyqdV.

gqmzhgarrl, Valium, cTNyqdV.

gqmzhgarrl, Valium, cTNyqdV.

zumba :

fyipuwcpjz, Dance aerobic, xBXpoSO.

zumba :

fyipuwcpjz, Dance aerobic, xBXpoSO.

vatxshzisq, Valium, WBWcMQI.

Ambien :

pessxfeiys, Buy Ambien, dXrfoiF.

Ambien :

pessxfeiys, Buy Ambien, dXrfoiF.

qxlewatwmr, Buy Viagra, KYjzdtX.

コメントする

プロフィール

横浜に住むエンジニアです。
ウェブサイトの構築やウェブアプリケーションの開発を行います。
下記アドレスまで、お気軽にご連絡下さい。
rbtsgm@gmail.com
(全て半角にして下さい)

rabbits software

広告