elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Ayuda] Ideas para Validacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Ideas para Validacion  (Leído 3,451 veces)
danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
[Ayuda] Ideas para Validacion
« en: 19 Junio 2017, 14:55 pm »

Hola a todos. Estoy creando un sistema de validacion como parte del proceso de aprendizaje (ya se que los frameworks lo hace pero necesito saber como funciona). Para eso Tengo una carpeta llamada class dentro de mi proyecto donde obviamente guardo las clases y dentro una carpeta llamada Validations donde dentro las clases ValidationClass, isTextValidationClass y isNumerosValidationClass por el momento. Cada una de las clases se llama igual que el archivo. Pues la clase ValidationClass es la clase padre y el resto son hijas. El código de la clase ValidationClass es el siguiente:

Código
  1. <?php
  2.  
  3.  
  4. /**
  5.  * User: Dark_Stone
  6.  * Date: 12/06/2017
  7.  * Time: 23:50
  8.  */
  9. class ValidationClass
  10. {
  11.    protected static function canBeValidated($dato)
  12.    {
  13.        /*
  14.          * Este metodo devuelve false y la clase hija que se haga cargo entonces retornará true
  15.          * Indicando que se puede hacer cargo de la validacion.
  16.          * */
  17.        return false;
  18.    }
  19.  
  20.  
  21.    public static function validar($datos)
  22.    {
  23.        //Instancia la clase
  24.        $validate = new ValidationClass();
  25.  
  26.        //Obtener los hijos en un array
  27.        $childs = $validate->getChilds();
  28.  
  29.        //Recorrer el array buscando a ver quien puede validar el dato
  30.        foreach ($childs as $child) {
  31.  
  32.            if ($child::canBeValidated($datos))
  33.                return $child::validar($datos);
  34.  
  35.        }
  36.    }
  37.  
  38.  
  39.  
  40.    private function getChilds()
  41.    {
  42.        //Metodo para determinar los hijos
  43.  
  44.        /*Un array vacio para guardar los nombres de las clases que retornen true
  45.         *  a la clase padre
  46.         */
  47.        $array = array();
  48.        //Obtener la direccion de los archivos de validacion
  49.        $folder = dir(getcwd() . "\\Validations");
  50.  
  51.        //recorrer la carpeta buscando quien coincida con la clase
  52.        while (false !== ($entry = $folder->read()))
  53.            if ($entry != '..' && $entry != '.' && $entry != 'ValidationClass.php') {
  54.                include $entry; //Incluimos cada archivo
  55.  
  56.                $className = str_replace('.php', '', $entry);
  57.                $parents = class_parents($className);
  58.                $ischildren = false;
  59.                foreach ($parents as $campo => $valor)
  60.                    if ($valor == 'ValidationClass') {
  61.                        $ischildren = true;
  62.                        break;
  63.                    }
  64.                if ($ischildren)
  65.                    $array[] = $className;
  66.  
  67.            }
  68.        return $array;
  69.    }
  70.  
  71.  
  72. }
  73.  

Y la clase isTextValidationClass por ejemplo, tiene el código de la siguiente forma (aun está en construccion)
Código
  1. <?php
  2.  
  3. /**
  4.  * User: Dark_Stone
  5.  * Date: 14/06/2017
  6.  * Time: 17:53
  7.  */
  8. class isTextValidationClass extends ValidationClass
  9. {
  10.  
  11.    protected static function canBeValidated($datos)
  12.    {
  13.        return is_string($datos);
  14.    }
  15.  
  16.  
  17.    public  static function validar($dato)
  18.    {
  19.        if(is_string($dato))
  20.        {
  21.            return "Es un string"; //Es un ejemplo de que hacer si es string
  22.        }
  23.    }
  24.  
  25.  
  26. }
  27.  

Eso me permite hacer algo como esto
Código
  1. $datos = "Esto es un String" //Ejemplo de string
  2. $validar = ValidationClass::validar($datos);
  3. echo $validar;
  4.  

Pero mi pregunta (ya era hora de que hiciera una despues de tanta explicacion) es: Como puedo validar en 2 métodos a la vez? o sea, saber por ejemplo si es string y si tiene mas de 15 caracteres? Usando 2 clases isTextValidationClass y MaxLengthValidationClass. Pense en pasarlo como parametros
Código
  1. $datos = "Esto es un String" //Ejemplo de string
  2. $anotherValidation = "MaxLengthValidationClass";
  3. $validar = ValidationClass::validar($datos,$anotherValidation);
  4. echo $validar;
  5.  
Pero no estoy seguro de cómo hacerlo. ¿Alguna idea por favor?


En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Ideas para Validacion
« Respuesta #1 en: 19 Junio 2017, 20:47 pm »

Yo creo que mejor seria que las clases tengan un método propio de validación y usen el general solo para devolver el resultado de dicha. De esta manera, podrías retornar $this en el propio validador y al final comprobar con una funcion (pj: isValid()) que todo esta correcto.

Código
  1. <?php
  2.  
  3.  
  4. class Validador {
  5.    protected $isValid = true;
  6.    protected $input = null;
  7.  
  8.    public function setInput($input){
  9.        $this->input = $input;
  10.        return $this;
  11.    }
  12.  
  13.    public function isValid(){
  14.        return $this->isValid;
  15.    }
  16.  
  17.    /** FUNCIONES DE OTRAS CLASES ... **/
  18.    public function isString(){
  19.        if(!$this->isValid){ return $this; } // No nos molestamos ya que un validador previo ha dado falso
  20.  
  21.        $this->isValid = (is_string($this->input));
  22.        return $this;
  23.    }
  24.  
  25.  
  26.    public function hasLength($length){
  27.        if(!$this->isValid){ return $this; } // No nos molestamos ya que un validador previo ha dado falso
  28.  
  29.        $this->isValid = (strlen($this->input) > $length);
  30.        return $this;
  31.    }
  32. }
  33.  
  34. $test = new Validador();
  35. var_dump($test->setInput('holakase')->isString()->hasLength(7)->isValid()); // true
  36. var_dump($test->setInput(123)->isString()->isValid()); // false
  37. var_dump($test->setInput('prueba123')->hasLength(50)->isString()->isValid()); // false

Por ejemplo.

Saludos


En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Ideas para Validacion
« Respuesta #2 en: 19 Junio 2017, 21:48 pm »

Gracias. Ya veo que hay varias formas. Ahora mismo otra persona me estaba comentando que la idea es que cuando le pases un dato de un formulario, el solo sepa el tipo de validacion que debe aplicar (el objetivo es que sea generico) y me dijo que busque sobre la base de ReflectionClass para que lea los comentarios y esas cosas. Y hable con quien me esta enseñando y me dijo que lo hiciera por prioridad (Primero las validaciones secundarias y luego las principales). Creo que tendría que estudiar cada una de las opciones y escoger la que más general Sea. Gracias por la respuesta! Agradecido totalmente
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda en validacion
Programación C/C++
josue_tux 2 2,474 Último mensaje 25 Mayo 2010, 02:49 am
por nicolas_cof
Ayuda con validacion de formulario PHP « 1 2 »
PHP
oscarj24 10 6,157 Último mensaje 10 Junio 2010, 02:51 am
por oscarj24
Ideas, sugerencias y ayuda para montarme una red wifi en casa
Redes
derion88 0 3,287 Último mensaje 4 Febrero 2011, 08:00 am
por derion88
Ayuda con doble validacion
Programación C/C++
alvaritoCABJ 1 2,079 Último mensaje 4 Abril 2012, 23:00 pm
por david_BS
AYUDA VALIDACION
Java
taos19 4 2,870 Último mensaje 21 Marzo 2014, 16:06 pm
por taos19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines