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?

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top