Méthode de chargement du contrôleur actuel
-
05-07-2019 - |
Question
J'ai un problème que je n'arrive pas à résoudre.
Je construis un petit cadre (pratique) et maintenant je construis la bibliothèque Validator. tout fonctionne à merveille sauf lorsque j'essaie de réparer le & call; callback " règle. La règle de rappel est utilisée lorsque le développeur doit utiliser une règle qui n'existe pas dans la bibliothèque de validateurs.
Voici comment je le fais.
Dans le contrôleur:
$this->validator->check('req|callback:test', J'ai un problème que je n'arrive pas à résoudre.
Je construis un petit cadre (pratique) et maintenant je construis la bibliothèque Validator. tout fonctionne à merveille sauf lorsque j'essaie de réparer le & call; callback " règle. La règle de rappel est utilisée lorsque le développeur doit utiliser une règle qui n'existe pas dans la bibliothèque de validateurs.
Voici comment je le fais.
Dans le contrôleur:
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='') {
}
Classe de validation:
UserController::test();
Mon problème est que, comment puis-je utiliser le "courant" manette. Par exemple, dans ce cas, je dois trouver:
$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();
Je peux trouver la bonne méthode dans $ key, mais constitue-t-il un moyen simple de déterminer quel contrôleur tourne?
J'ai essayé d'utiliser l'URL comme:
<*>
Mais ça n'a pas marché du tout. Des idées?
POST['module_name'], 'Module Name');
Classe de validation:
<*>Mon problème est que, comment puis-je utiliser le "courant" manette. Par exemple, dans ce cas, je dois trouver:
<*>Je peux trouver la bonne méthode dans $ key, mais constitue-t-il un moyen simple de déterminer quel contrôleur tourne?
J'ai essayé d'utiliser l'URL comme:
<*>Mais ça n'a pas marché du tout. Des idées?
La solution
Quelques manières d’aborder ceci.
Tout d'abord, je suppose que quelque part vous avez du code qui transforme un URI
example.com/foo
dans un nom de classe de contrôleur
class FooController
Cela s'appelle généralement "routage". Si tel est le cas, exposez votre classe / méthode de routeur au validateur et / ou à l'ensemble du système. Cela vous permettra, à tout moment, d'obtenir le nom d'un contrôleur à partir de l'URI.
Deuxièmement, lors de l’instanciation de votre validateur, donnez-lui une référence à l’objet contrôleur pour la requête en question. Il s’agit alors d’un simple appel à get_class_name
ou à l’API de réflexion.
Troisièmement, exigez que votre contrôleur soit transmis avec votre appel à la méthode check
.