現在のコントローラーからのメソッドの読み込み
-
05-07-2019 - |
質問
理解できない問題があります。
小さなフレームワーク(プラクティス)を構築していますが、今は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
メソッドへの呼び出しとともにコントローラーを渡す必要があります。