Bonjour,

Je veux valider mes données avant enregistrement. Seulement, j'ai besoin de beaucoup de liberté : j'ai besoin de vérifier si il s'agit bien de caractères alphaNumeric mais avec autorisation des espaces, ces données ne sont pas requises, et doivent pouvoir être laissées vides.
J'ai essayé ceci, mais il m'empêche de de sauvegarder.

public $validate = array(
        'data_1' => array(
                'rule' => 'alphaNumeric,
                'required' => false,
                'allowEmpty' => true,
                'message' => 'mon message'
            ),
    );

Je suis pour l'instant sur ce code, mais je n'ai pas confiance. Des envois de données dangereuses sont possibles, non ?

public $validate = array(
        'data_1' => array(
            'rule' => array('maxLength', 255),
                'required' => false,
                'message' => '255 caractères max'
            ),

Je suis aller faire un tour sur la doc bien sur, et j'ai vu qu'il était possible d'utilisé des regex. Malheureusement, je ne maîtrise absolument pas leur utilisation.
J'ai besoin d'un petit coup de main

Merci d'avance :)

7 réponses


Guiguiwuip
Auteur
Réponse acceptée

Voilà ce que j'ai fini par faire (avec beaucoup de retard, désolé, par manque de temps ...)

//Dans AppModel
var $cleanData = true;
function beforeSave() {
    if (!empty($this->data) && $this->cleanData === true) {
        $connection = (!empty($this->useDbConfig)) ? $this->useDbConfig : 'default';

        $this->data = Sanitize::clean($this->data, array(
                'connection' => $connection,
                'escape' => false,
                'encode' => true,
                'remove_html' => true,
                'dollar' => true
            ));
    }
    return true;
}

Et puis j'adapte à mes besoins les validate de chaque modèle.

Déjà pour information, tu peux faire plusieurs règle pour une variable:

public $validate = array(
        'data_1' => array(
           'Validation1' => array(
                'rule' => 'alphaNumeric,
                'required' => false,
                'allowEmpty' => true,
                'message' => 'mon message'
            ),
            'Validation2' => array(
                'rule' => array('maxLength', 255),
                'required' => false,
                'message' => '255 caractères max'
            )
        )
     )
);

En suite, pour la validation en gérant les espace et les alphanum, sincèrement, je ne sais pas, mais je serais ravis de l'apprendre ^^.

Merci de ta réponse.

Oui, je connaissais déjà les multiple Rule. Mais elles ne répondaient pas a mon problème principal qui était de sécuriser mes donnés.
Je viens de (re)tomber par hasazrd sur la class Sanitize que j'avais complètement oubliée. Je vais probablement faire un mixte de Sanitize et Validate pour être tranquille.

Ok, tien moi au courant si ça marche :D

Pas de problème, j'essaye ça demain ;)

Tu peux aussi tout simplement ne faire qu'une seule règle personnelle liée à une expression régulière. Alphanumériques + espaces, ce n'est pas bien difficile à réaliser.

Oui effectivement c'est se que j'ai fait dans une de mes validation.