administrador.modelado.validaciones.valida_data_filtro_especial - gamboamartin/administrador GitHub Wiki

valida_data_filtro_especial

Esta función valida un campo y un filtro específico, asegurándose de que los datos cumplan con ciertos requisitos. Si los datos no cumplen con los criterios esperados, la función retorna un error; de lo contrario, retorna true.

Signatura

final public function valida_data_filtro_especial(string $campo, array $filtro): true|array

Parámetros

    • $campo** (string): El nombre del campo que se está validando. Este campo no debe estar vacío y debe ser un string.
    • $filtro** (array): Un array asociativo que contiene la configuración del filtro para el campo. Este array debe incluir al menos los siguientes elementos para cada campo:
      • operador
        • Un operador de comparación (por ejemplo, =, >, <, etc.).
      • valor
        • El valor a comparar con el campo.
      • valor_es_campo (opcional)
        • Indica si el valor es otro campo.

Retorna

  • true: La función retorna true cuando todas las validaciones son exitosas, indicando que los datos del campo y el filtro son correctos.

  • array: La función retorna un array cuando una de las validaciones falla. Este array contiene información sobre el error que ocurrió.

Explicación Detallada

  • Validación de campo vacío

    • Si el campo está vacío ($campo === ''), retorna un error indicando que el campo está vacío.
  • Validación de tipo de dato del campo

    • Si el campo no es un string y no está definido el valor valor_es_campo en el filtro, retorna un error indicando que el campo debe ser un string.
  • Validación de existencia del operador

    • Si el filtro no tiene definido un operador para el campo, retorna un error indicando que debe existir un operador en el filtro.
  • Asignación de valor vacío

    • Si no existe un valor para el campo en el filtro, se asigna un valor vacío ('').
  • Validación de tipo de dato del valor

    • Si el valor del campo en el filtro es un array, retorna un error indicando que el valor debe ser un dato simple (no un array).
  • Retorno exitoso

    • Si todas las validaciones anteriores son exitosas, retorna true.

Ejemplos

  • Ejemplo 1: Campo vacío

$campo = '';
$filtro = [];

$resultado = valida_data_filtro_especial($campo, $filtro);
// Resultado: Error campo vacio

  • Ejemplo 2: Campo no es string y valor_es_campo no está definido

$campo = 123;
$filtro = [
    123 => [
        'operador' => '=',
        'valor' => 'valor'
    ]
];

$resultado = valida_data_filtro_especial($campo, $filtro);
// Resultado: Error el campo debe ser un string $filtro[campo]

  • Ejemplo 3: Falta operador en el filtro

$campo = 'nombre';
$filtro = [
    'nombre' => [
        'valor' => 'Juan'
    ]
];

$resultado = valida_data_filtro_especial($campo, $filtro);
// Resultado: Error debe existir $filtro[campo][operador]

  • Ejemplo 4: Valor del campo es un array

$campo = 'edad';
$filtro = [
    'edad' => [
        'operador' => '>',
        'valor' => [25]
    ]
];

$resultado = valida_data_filtro_especial($campo, $filtro);
// Resultado: Error $filtro['edad']['valor'] debe ser un dato

  • Ejemplo 5: Validación exitosa

$campo = 'ciudad';
$filtro = [
    'ciudad' => [
        'operador' => '=',
        'valor' => 'Madrid'
    ]
];

$resultado = valida_data_filtro_especial($campo, $filtro);
// Resultado: true

Código de la Función

final public function valida_data_filtro_especial(string $campo, array $filtro): true|array
    {
        if($campo === ''){
            return $this->error->error(mensaje: "Error campo vacio", data: $campo, es_final: true);
        }
        if(!isset($filtro[$campo]['valor_es_campo']) && is_numeric($campo)){
            return $this->error->error(mensaje:'Error el campo debe ser un string $filtro[campo]', data:$filtro,
                es_final: true);
        }
        if(!isset($filtro[$campo]['operador'])){
            return $this->error->error(mensaje:'Error debe existir $filtro[campo][operador]', data:$filtro,
                es_final: true);
        }
        if(!isset($filtro[$campo]['valor'])){
            $filtro[$campo]['valor'] = '';
        }
        if(is_array($filtro[$campo]['valor'])){
            return $this->error->error(mensaje:'Error $filtro['.$campo.'][\'valor\'] debe ser un dato', data:$filtro,
                es_final: true);
        }
        return true;
    }