PHP code example of andydefer / data-validator

1. Go to this page and download the library: Download andydefer/data-validator library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

andydefer / data-validator example snippets




use Kani\DataValidator\Services\MetadataValidator;

$metadata = [
    'user_agent' => 'Mozilla/5.0',
    'preferences' => ['theme' => 'dark', 'notifications' => true],
    'ip_address' => '192.168.1.1',
    'null_value' => null // sera supprimé lors de l'assainissement
];

// Validation seule (lève une exception en cas d'erreur)
$validated = MetadataValidator::validate($metadata);

// Validation sans exception (booléen)
if (MetadataValidator::isValid($metadata)) {
    echo "Les métadonnées sont valides !";
}

// Assainissement seul (supprime null et tableaux vides)
$cleaned = MetadataValidator::sanitize($metadata);

// Tout-en-un : validation + assainissement
$processed = MetadataValidator::process($metadata);

use Kani\DataValidator\Exceptions\MetadataValidationException;

try {
    $metadata = MetadataValidator::validate($largeMetadata);
} catch (MetadataValidationException $e) {
    echo "Erreur : " . $e->getMessage();
    print_r($e->getDetails()); // Détails contextuels
}

// Succès : retourne les métadonnées
$valid = MetadataValidator::validate(['key' => 'value']);

// Échec : lève MetadataValidationException
$valid = MetadataValidator::validate($invalidData);

if (MetadataValidator::isValid($input)) {
    // Traiter les données
}

$metadata = ['keep' => 'value', 'remove' => null, 'nested' => []];
$result = MetadataValidator::sanitize($metadata);
// $result = ['keep' => 'value']

$clean = MetadataValidator::process($rawMetadata);

$size = MetadataValidator::getSize($metadata); // 1245 bytes

$depth = MetadataValidator::getNestingDepth($nestedArray); // 3

$userMetadata = [
    'browser' => 'Chrome 120',
    'os' => 'Windows 11',
    'preferences' => [
        'language' => 'fr',
        'timezone' => 'Europe/Paris',
        'notifications' => ['email' => true, 'push' => false]
    ],
    'last_login' => '2024-01-15T10:30:00Z'
];

if (MetadataValidator::isValid($userMetadata)) {
    $clean = MetadataValidator::process($userMetadata);
    // Stocker dans la base de données
}

// Trop grande (> 64KB)
$hugeMetadata = ['data' => str_repeat('a', 70000)];
// Lève MetadataValidationException

// Trop profonde (6 niveaux, max 5)
$deepMetadata = ['a' => ['b' => ['c' => ['d' => ['e' => ['f' => 'too deep']]]]]];
// Lève MetadataValidationException

// Trop de clés (101, max 100)
$manyKeys = [];
for ($i = 0; $i < 101; $i++) {
    $manyKeys["key_$i"] = "value_$i";
}
// Lève MetadataValidationException

// Clé trop longue (256 caractères, max 255)
$longKey = str_repeat('a', 256);
$badMetadata = [$longKey => 'value'];
// Lève MetadataValidationException

$dirty = [
    'keep1' => 'important',
    'null1' => null,
    'keep2' => 42,
    'nested' => [
        'keep' => 'data',
        'empty' => [],
        'null' => null
    ],
    'empty_array' => []
];

$clean = MetadataValidator::sanitize($dirty);
// Résultat :
// [
//     'keep1' => 'important',
//     'keep2' => 42,
//     'nested' => ['keep' => 'data']
// ]

// Laravel / Eloquent
class User extends Model
{
    public function setMetadataAttribute(array $value): void
    {
        $this->attributes['metadata'] = json_encode(
            MetadataValidator::process($value)
        );
    }
}

use Kani\Nemesis\Services\TokenMetadataService;

// Nemesis utilise déjà MetadataValidator en interne
$token = $user->createNemesisToken(
    name: 'API Token',
    metadata: ['device' => 'iPhone', 'version' => '2.0']
);
// Les métadonnées sont automatiquement validées et assainies

class CustomValidator extends MetadataValidator
{
    private const MAX_METADATA_SIZE = 131072; // 128KB
    private const MAX_NESTING_DEPTH = 10;
    private const MAX_KEYS = 500;
    private const MAX_KEY_LENGTH = 512;
}

try {
    MetadataValidator::validate($metadata);
} catch (MetadataValidationException $e) {
    Log::warning('Validation échouée', [
        'message' => $e->getMessage(),
        'details' => $e->getDetails()
    ]);
}