Método de carga desde el controlador actual
-
05-07-2019 - |
Pregunta
Tengo un problema que no puedo resolver.
Estoy creando un pequeño marco (práctica) y ahora estoy creando la biblioteca Validator. todo funciona de maravilla, excepto cuando trato de arreglar el " devolución de llamada " regla. La regla de devolución de llamada se usa cuando el desarrollador necesita usar una regla que no existe en la libreta de validación.
Así es como lo estoy haciendo.
En el controlador:
$this->validator->check('req|callback:test', Tengo un problema que no puedo resolver.
Estoy creando un pequeño marco (práctica) y ahora estoy creando la biblioteca Validator. todo funciona de maravilla, excepto cuando trato de arreglar el " devolución de llamada " regla. La regla de devolución de llamada se usa cuando el desarrollador necesita usar una regla que no existe en la libreta de validación.
Así es como lo estoy haciendo.
En el controlador:
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='') {
}
Clase de validador:
UserController::test();
Mi problema es que, ¿cómo puedo usar el " actual " controlador. Por ejemplo, en este caso necesito encontrar:
$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();
Puedo encontrar el método correcto en $ key, pero ¿es la forma más sencilla de averiguar qué controlador está funcionando?
Intenté usar la URL como:
<*>
Pero eso no funcionó en absoluto ... ¿Alguna idea?
POST['module_name'], 'Module Name');
Clase de validador:
<*>Mi problema es que, ¿cómo puedo usar el " actual " controlador. Por ejemplo, en este caso necesito encontrar:
<*>Puedo encontrar el método correcto en $ key, pero ¿es la forma más sencilla de averiguar qué controlador está funcionando?
Intenté usar la URL como:
<*>Pero eso no funcionó en absoluto ... ¿Alguna idea?
Solución
Algunas maneras diferentes de abordar esto.
Primero, asumo que en algún lugar tienes algún código que convierte un URI
example.com/foo
en un nombre de clase de controlador
class FooController
Esto normalmente se denomina " enrutamiento " ;. Si es así, de alguna manera exponga su clase / método de enrutador al validador y / o al sistema completo. Esto le permitirá, en cualquier momento, obtener el nombre de un controlador de la URI.
Segundo, al crear una instancia de su validador, déle una referencia al objeto del controlador para la solicitud en particular. Entonces es solo una simple llamada a get_class_name
o la API de reflexión.
Tercero, exija que su controlador se transfiera junto con su llamada al método check
.