Bonsoir :)
Alors voilà j'ai mon site qui est en train de se monter avec CakePHP mais j'aimerai y rajouter une validation des champs jme rend sur le doc je fait tout ce qu'il (enfin presque vu que ca marche pas ^^ ) et je trouve pas le probleme il dit que mon form et valide alors que je post "a" dans tout les champs :
M'Voyez !

//Model user.php
<?php
    class User extends AppModel{
            var $name = 'User';
            var $validate = array(
                      'email' => array( 'rule' => array('minLength', 3) ),
                      'pass' => array( 'rule' => array('minLength', 3) ),
                      'nom' => array( 'rule' => array('minLength', 3) ),
                      'prenom' => array( 'rule' => array('minLength', 3) ),
                      'telephone' => array( 'rule' => array('minLength', 3) ),
                      'dep' => array( 'rule' => array('minLength', 3) ),
                      );
    }
?>

//Controller users_controller.php
<?php
      function ajouter(){
        if(isset($this->data)){
            if ($this->User->validates()) {
          debug($this->data);
                }
            }
      }
?>

Et ma vue :

//ajouter.ctp
<h1 class="title">S'inscrire</h1>
<?php
echo $html->script('focusfield');
echo $form->create('User',array('enctype'=>'multipart/form-data','url'=>array('action'=>'ajouter')));
echo $form->input("email", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Email...","label"=>"Email :"));
 echo '<div class="clear"></div><br />';
echo $form->input("pass", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Mot de Passe...","label"=>"Mot de Passe :"));
 echo '<div class="clear"></div><br /><hr style="margin:0 30px;"><br />';
echo $form->input("nom", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Nom...","label"=>"Nom :"));
 echo '<div class="clear"></div><br />';
echo $form->input("prenom", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Prénom...","label"=>"Prénom :"));
 echo '<div class="clear"></div><br />';
echo $form->input("telephone", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Numéro de Téléphone...","label"=>"Téléphone :"));
 echo '<div class="clear"></div><br />';
echo $form->input("dep", array("class"=>"newannonceinput autoEmpty","value"=>"Département (ex:75000) ...","label"=>"Département :"));
 echo '<div class="clear"></div><br /><div id="submitnewannonce" >';
echo $form->end("S'inscrire");
echo "</div>";
?>

et ca me donne bien le debug :

13 réponses


zaarkan
Réponse acceptée

Voila le code que j'utilise (moins la partie ajout à la base).
User_controller :

function register()
        {
            if(!empty($this->data))
            {
                $this->User->set( $this->data );
                debug($this->User->data);
                if( $this->User->validates() )
                {                            
                        //CODE
                        $this->User->save($this->data);                       

                }else
                {
                    $this->validateErrors($this->User);
                }
            }

        }

User model contient :

var $validate = array(
                    'pass' => array(
                        'rule' => array('minLength', 8),
                        'required' => true,
                        'allowEmpty' => false,
                        'message' => 'Votre password dois comporter au min 8 caractère.'
                        ),
                    'email' => array(
                        'rule' => array('email', true),
                        'required' => true,
                        'allowEmpty' => false,
                        'message' => 'Veillez entrez un email correct !'
                        )
                    );

Ps: petit bug dans ajout de cote c'est "if(!empty($this->data))" Pas "if(!emptyempty($this->data)) "

zaarkan
Réponse acceptée

Je te conseillerais de passer en revue règle par règle en commentant une partie du code. Tes règles sont peut être en partie ou en totalité toujours vraie. J'ai eu le problème inverse avec une règle qui était tjrs fausse.

Si je ne dit pas de connerie les règle de validation ne sont interpréter que a partir du moment ou tu fait appel a la méthode save() hors la avec un debug tu n'envoie rien dans la BDD donc tu ne fait pas appel au model.

Avez vous lu mon ma réponse car sa mais arriver exactement la même chose ...

Son controller est bien nommer les controllers et les dossier de vues tu les met au pluriel et les models au singulier.

Tu fais
if ($this->User->validates()) {
Mais avant tu n'envois pas au model les données
$this->User->set($this->data);

likeo
Auteur

donc jdoit les envoyer avant de valider ?

comme ceci ?

//users_controller.php
function ajouter(){
        if(isset($this->data)){
        $this->User->set($this->data);
        if ($this->User->validates()) {
        debug($this->data);
        }
}}

Marche pas :S

users_controlelr.php
function ajouter(){
        if(isset($this->data)){
        $this->User->set($this->data);
        if ($this->User->validates($this->data)) {
        $this->User->save($this->data);
        }
}}

Non plus :S

Test comme ca

function ajouter(){
        if (!empty($this->data)){
            $this->User->set($this->data); 
            if ($this->User->validates($this->data)){
                $this->Session->setFlash('OK');
                $this->User->save($this->data);
            }
            else {
                $this->Session->setFlash('Pas ok');
                $this->validateErrors($this->User);
            }
        }

Edit: Le empty en rouge ce rajoute tout seul il a rien a faire la :s

likeo
Auteur

Toujours pas :S

Ça t'upload les données dans ta bdd sans tenir compte de la validation ou ca te met un message d'erreur?

likeo
Auteur

Ca Up Comme si tout etait ok avec le message "OK"

1. users_controlelr.php  
   2.   
   3. function ajouter(){  
   4. if(isset($this->data)){  
   5. $this->User->set($this->data);
              debug($this->User>data);  
   6. if ($this->User->validates($this->data)) {  
   7. $this->User->save($this->data);  
   8. }  
   9. }}

En debug du User->data tu à quoi ? les données sont bien passer ? les noms de variables correspondent bien au validate ?

likeo
Auteur

Les données sont passée et tout va bien Comme si je sauvegarder sans validation :S