質問

理解できない問題があります。

小さなフレームワーク(プラクティス)を構築していますが、今はValidatorライブラリを構築しています。 " callback"を修正しようとする場合を除いて、すべてが素晴らしい動作をします。ルール。コールバックルールは、開発者がValidatorライブラリに存在しないルールを使用する必要がある場合に使用されます。

ここで私はそれをやっています。

コントローラー内:

$this->validator->check('req|callback:test', 

理解できない問題があります。

小さなフレームワーク(プラクティス)を構築していますが、今はValidatorライブラリを構築しています。 " callback"を修正しようとする場合を除いて、すべてが素晴らしい動作をします。ルール。コールバックルールは、開発者がValidatorライブラリに存在しないルールを使用する必要がある場合に使用されます。

ここで私はそれをやっています。

コントローラー内:

public function check($rules, $input, $fieldname='') {
    $rule = explode('|', $rules);
    foreach ($rule as $r) {
        $request = explode(":",$r,2);
        $method = array_shift($request);
        $parameter = $request;
        array_unshift($parameter,$input);   
        array_push($parameter,$fieldname);
        if (method_exists($this, $method)) {
            call_user_func_array(array($this,$method), $parameter);
        }
  }

protected function callback($input, $key, $fieldname='') {

}

検証クラス:

UserController::test();

私の問題は、「現在」をどのように使用できるかです。コントローラ。たとえば、この場合、次を見つける必要があります。

$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();

$ keyで正しいメソッドを見つけることができますが、ローリングしているコントローラーを見つける簡単な方法ですか?

次のようなURLを使用しようとしました:

<*>

しかし、それはまったく機能しませんでした。アイデアはありますか?

POST['module_name'], 'Module Name');

検証クラス:

<*>

私の問題は、「現在」をどのように使用できるかです。コントローラ。たとえば、この場合、次を見つける必要があります。

<*>

$ keyで正しいメソッドを見つけることができますが、ローリングしているコントローラーを見つける簡単な方法ですか?

次のようなURLを使用しようとしました:

<*>

しかし、それはまったく機能しませんでした。アイデアはありますか?

役に立ちましたか?

解決

これにアプローチするいくつかの異なる方法。

最初に、どこかにURIを変えるコードがあると思います

example.com/foo

コントローラークラス名へ

class FooController

これは通常「ルーティング」と呼ばれます。その場合、何らかの方法でルータークラス/メソッドをバリデーターやシステム全体に公開します。これにより、いつでもURIからコントローラーの名前を取得できます。

2番目に、バリデータをインスタンス化するときに、特定のリクエストのコントローラオブジェクトへの参照を渡します。それは単に get_class_name を呼び出すか、リフレクションAPIを使用するだけです。

第三に、 check メソッドへの呼び出しとともにコントローラーを渡す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top