Extraer las clases de Validación

Para lograr una experiencia más flexible y legible, extraigamos las reglas de validación básicas que escribimos en el episodio anterior en una clase Validación dedicada.

Que aprenderemos

  • Validation
  • Pure Functions
  • Static Methods

Crear la clase

Para requerir una clase puede se de dos maneras, cualquiera de las dos es valida.

require 'Validator.php';
require('Validator.php');

Crear la clase Validator.php en la raíz del proyecto. Recuerda que por convención capitalizamos la V en Validator.php para indicar que este archivo solo va a tener una sola clase.

class Validator
{
    public function string($value, $min = 1, $max = INF)
    {
        $value = trim($value);
        return strlen($value) >= $min && strlen($value) <= $max;
    }
}

y en controllers/note-create.php

$errors = [];
$validator = new Validator();
if (! $validator->string($_POST['body'], 1, 1000) ) {
	$errors['body'] = 'Se requiere contenido entre 1 y 1000 caracteres.';
}

Análisis

INF = Infinite

Funciones puras y Static Functions

Una función pura es cuando no tenemos dentro de ella referencias a propiedades internas de la clase o a otras clases, simplemente recibe unos parámetros y regresa una respuesta, cuando tenemos funciones puras podemos declararlas static. Al definir una función static nos permite mandarla llamar sin necesidad de declarar una instancia de la clase.

Entonces nos quedan así los archivos: En controllers/note-create.php:

$errors = [];
if (! Validator::string($_POST['body'], 1, 1000) ) {
	$errors['body'] = 'Se requiere contenido entre 1 y 1000 caracteres.';
}

y static en Validator.php:

public static function string($value, $min = 1, $max = INF){
	$value = trim($value);
	return strlen($value) >= $min && strlen($value) <= $max;
}

Como un extra vamos a ver como validar un email. Vamos a usar un función de php . (PHP 5 >= 5.2.0, PHP 7, PHP 8) filter_var — Filters a variable with a specified filter En Validator.php:

public static function email($value){
	return filter_var($value, FILTER_VALIDATE_EMAIL);
}

En cuestión de funcionalidad quedamos como al final de la lección pasada, pero ahora, estamos en una mucho mejor posición, en donde podemos mandar llamar a nuestro Validator de cualquier parte para que haga las funciones correspondientes de validar nuestros campos.

Listo!