La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 6 ]

ToX

Topic: [1.2] Validazione

posto qua un link che ritengo molto utile, riguarda i nuovi sistemi di validazione implementati su cakephp 1.2 (ho trovato questo link per caso, quasi tutta la documentazione che si trova in giro è ancora relativa al vecchio sistema basato sulle costanti VALID_NOT_EMPTY, VALID_NUMBER ecc.)

http://cakebaker.42dh.com/2007/01/03/va … akephp-12/

decisamente più comodo e flessibile, no? smile

ToX

Re: [1.2] Validazione

dimenticavo... in quella pagina non c'è scritto come fare per usare validazioni multiple, ho fatto qualche tentativo e questo metodo funziona:


    var $validate = array(
        'nome' => array(
            'rule' => array('blank', 'alphaNumeric'),
            'message' => 'Campo facoltativo, solo caratteri alfanumerici'
            )
    );

zuck

Re: [1.2] Validazione

Io ho avuto problemi in due casi:

1) Il valore del campo deve essere unico all'interno del DB (es: username, email, ecc.). Tale controllo va fatto sia durante la creazione (ovvio), sia durante la modifica (se l'utente in fase di modifica dello "username" ne sceglie uno già esistente la procedura deve restituire un errore). Non si può quindi sfruttare la clausola "on". Ho dovuto quindi ricorrere ad un metodo personalizzato: ho fatto l'override in "AppModel" nella cartella "App" del metodo "isUnique"...

/**
     * False if any fields passed match any (by default, all if $or = false) of their matching values.
     *
     * @param array $fields Field/value pairs to search (if no values specified, they are pulled from $this->data)
     * @param boolean $or If false, all fields specified must match in order for a false return value
     * @param boolean $notThis If true and $or is false, current record not matchs specified fields.
     * @return boolean False if any records matching any fields are found
     * @access public
     */
    function isUnique($fields, $or = true, $notThis = true) {
        
        if (!is_array($fields)) {
            $fields = func_get_args();
            if (is_bool($fields[count($fields) - 1])) {
                $or = $fields[count($fields) - 1];
                unset($fields[count($fields) - 1]);
            }
        }

        foreach ($fields as $field => $value) {
            if (is_numeric($field)) {
                unset($fields[$field]);

                $field = $value;
                if (isset($this->data[$this->alias][$field])) {
                    $value = $this->data[$this->alias][$field];
                } else {
                    $value = null;
                }
            }

            if (strpos($field, '.') === false) {
                unset($fields[$field]);
                $fields[$this->alias . '.' . $field] = $value;
            }
        }
        
        if ($notThis && $this->id) {
            
            $fields[$this->name.'.id'] = '<> '.$this->id;
        }
        
        if ($or) {
            
            $fields = array('or' => $fields);
        }
        
        return ($this->find('count', array('conditions' => $fields)) == 0);
    }

Dove la parte aggiunta è quella relativa al parametro "notThis" wink

2) Un campo è obbligatorio se un altro è valido (ad esempio un checkbox). Anche qui sono ricorso ad un metodo personalizzato in "AppModel":

    /**
     * Verifica che il valore del campo sia impostato se lo è anche
     * quello del campo passato come secondo parametro.
     */
    function __validIf($data, $fieldName) {
        
        $value = array_values($data);
        
        if (!empty($this->data[$this->name][$fieldName])) {

            return !empty($value[0]);
        }
        
        return true;
    }

Spero possano tornarvi utili wink

bonzo

Re: [1.2] Validazione

Molto utili questi esempi.


Vi chiedo una cosa.
In un form di registrzione, se voglio avere password e conferma password, come faccio a controllare che siano uguali?

Devo mettere tutto nell' user_controller e fare un controllo prima che tutto passi al model?

dalpo

Re: [1.2] Validazione

Ciao io di solito faccio il controllo dal Users Controller:

UsersController

function admin_add() {
        if (!empty($this->data)) {
            $this->User->begin();
            $this->User->create();
            if ($this->User->save($this->data) && $this->data["User"]["password1"] == $this->data["User"]["password2"]) {
                $this->data["User"]["password"] = $this->Auth->password($this->data["User"]["password1"]);
                $this->User->save($this->data);
                $this->User->commit();
                $this->Session->setFlash(__('L\'amministratore è stato creato', true));
                $this->redirect(array('action'=>'index'));
            }
            else {
                $this->User->rollback();
                if($this->data["User"]["password1"] != $this->data["User"]["password2"]) {
                    $this->User->invalidate('password2', 'Le passwords non corrispondono');
                }
                $this->Session->setFlash(__('Attenzione. Sono presenti uno o più campi non validi', true));
            }
        }
    }

Però volendo potresti crearti un metodo di validazione personalizza nel model (che sarebbe la cosa migliore secondo me)..
Per esempio:

User Model

var $validate = array(            
        'password' => array (
            'valid_upload' => array (
                'rule' => array('myPasswordValidation'),
                'message' => 'La password non corrisponde'
            )
        )
    );
    
function myPasswordValidation($data) {    
    $data = array_shift($data);
    if ($data['password] != $data['password2']) {
        return false;
    }        
    return true;        
}

Quest'ultimo esempio l'ho scritto al volo e non l'ho testato.. Comunque se ci sono problemi fammi sapere

Ciau

Namaless

Re: [1.2] Validazione

Stickato la discussione, spero possa tornare utile. Grazie smile

Posts [ 6 ]

Guest posting is disabled. You must login or register to post a reply.

Pages: 1

Topic info

0 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.032 seconds, 12 queries executed ]