Load-Methode von Stromreglern
-
05-07-2019 - |
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?
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
drehtexample.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.