0

小さな mvc ベースのアプリケーションを構築しようとしています。

クエリ文字列に基づいてクラスのメソッドを呼び出すにはどうすればよいですか?

たとえば、$_GET クエリ文字列は load_master_form として設定されています。

http://www.domain.com/settings/load_master_form

そして、設定クラス内でメソッドを呼び出すために、私はやっています:

function __construct(){
    $this->{$_GET['method']}();
}

しかし、明らかにそれは機能しません。そのようなメソッドをロードすることは不可能です。では、それはどのように行われるのでしょうか?

4

3 に答える 3

1

$_GET['method'] のメソッドを作成し、URI ルーティング (.htaccess など) を使用している限り、これはうまくいくと思います。

一般的に、私は URI でメソッド名を呼び出す傾向があります -

// domain.com/class_name/method_name/params

class class_name{
    function __construct(){
        ...
    }
    function method_name(){
        ...
    }
// etc.
}
于 2012-10-28T16:50:34.163 に答える
0

最初に、.htaccess ファイルを作成して、すべてのリクエストを 1 つのファイル (通常は index.php) にリダイレクトする必要があります。ユーザーが入力した文字列は、 GET変数として php に渡されます。

.htaccess ファイルの作成方法については、こちらを参照してください。

次に、MVC の構造を決定する必要があります。url(http://www.someting.com/first/second/third) の 3 つおきの引数をメソッドにしたいとしましょう。それからあなたはこのようなことをするでしょう..

// Variables
$args = explode('/',$_GET['method']);

// Get method
$method = rtrim($args[1]);

これはただの汚い解決策です..

于 2012-10-28T16:47:09.783 に答える
0

次のようにリフレクションを使用します。

public static function doUserMethod($methodName)
{
    $reflectionMethod = new ReflectionMethod('YourUserMethodsClass', $methodName);
    return $reflectionMethod->invokeArgs(new YourUserMethodsClass(), array(/* Method Arguments Here */));
}

次に、次のように呼び出すことができます。

YourClass::doUserMethod($_GET['method']);

これの利点は、指定した特定のクラスのメソッドのみにユーザーを制限できることです (つまりYourUserMethodsClass、私の例で)。ただし、メソッドにパラメーターが必要な場合は、特別な追加処理が必要になることは明らかです (指定した例とは異なります)。

于 2012-10-28T16:56:37.167 に答える