Frage

Ich habe ein Problem, dass ich kann nicht herausfinden.

Ich baue einen kleinen Rahmen (Praxis) und jetzt die Validator Bibliothek Ich baue. alles funktioniert hervorragend, außer wenn ich versuche, den „Rückruf“ -Regel zu beheben. Callback-Regel verwendet, wenn die Entwickler brauchen eine Regel zu verwenden, die vor dem Validator lib dosen't ..

Hier ist, wie ich es mache.

In der Steuerung:

$this->validator->check('req|callback:test', $_POST['module_name'], 'Module Name');

Validator-Klasse:

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='') {

}

Mein Problem ist, dass, wie kann ich die „aktuellen“ Controller verwenden. Zum Beispiel, in diesem Fall muß ich finden:

UserController::test();

Ich kann die richtige Methode in $ Schlüssel finden, aber ist die eine einfache Möglichkeit, weichen Controller um herauszufinden, dass rollt?

Ich habe versucht, die URL zu verwenden, wie:

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

Aber das hat nicht funktioniert .. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ein paar verschiedene Möglichkeiten, dies zu nähern.

Zuerst Ich gehe davon aus, dass irgendwo Sie einen Code haben, die einen URI

dreht
example.com/foo

in einen Controller classname

class FooController

Dies ist in der Regel "Routing" genannt. Wenn ja, aussetzen irgendwie Ihre Router Klasse / Methode zum Validator und / oder das gesamten System. Dies wird Ihnen lassen, jederzeit, den Namen eines Controller aus der URI erhalten.

Zweitens, wenn Ihr Validator instanziiert wird, gibt ihm einen Verweis auf das Controller-Objekt für die jeweilige Anforderung. Dann ist es nur ein einfacher Anruf get_class_name oder das Reflection-API entfernt.

Drittens verlangt, dass Ihr Controller zusammen mit Ihrem Aufruf an die check Methode übergeben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top