2

着信ajaxリクエストを処理するphpのフロントコントローラーを備えたより大きなアプリケーションがあります。アクション->メソッドマッピングを処理する良い方法を考えています。このコントローラーは、他のクラスのインスタンス化とそこでのメソッドの実行を担当します。

スイッチが大きくなりすぎて、醜いです。私は配列を作成することを考えていて、単純に次のことを行っていました。

if(in_array($action, $methodmap)){
  $methodmap[$action]();
}    

しかし、それがどれほど効率的であるか、または他のより良い代替手段があるかどうかわからない場合、このコントローラーは大量の着信要求を処理するため、パフォーマンスが重要です。

ありがとう!

4

2 に答える 2

2

簡単なルーティングシステムを作成できます。

index.php

<?php

class InvalidClassException extends Exception {}
function autoloader($class)
{
    $path = 'controllers/'.$class.'.php';
    if (!ctype_alnum($class) || !file_exists($path))
        throw new InvalidClassException("Couldn't find '$class'");
    require($path);
}
spl_autoload_register('autoloader');

$request = isset($_GET['request'])?$_GET['request']:'front';
$controller = new $request();
$controller->index();

controllers/そして、すべてのコントローラーを保管するディレクトリー。例えば

controllers / test1.php

<?php

class Test1
{
    public function index()
    {
        print "Test 1";
    }
}

アクセスするとindex.php?request=test1Test1->index()が呼び出され、出力されます

テスト1

于 2012-01-28T16:43:17.697 に答える
0

代わりに「ルーティング」構成ファイルを使用してTRy...そうすれば、実際のアクション/メソッドマッピングコードを変更することなく、アプリケーションに新しいルーティングを追加できます。

于 2012-01-28T16:28:11.000 に答える