Bonjour à tous,

Je développe actuellement une application Web en utilisant CakePHP 3.3.5.

J'ai créé un formulaire de contact avec une vérification de l'email et du mot de passe.
Lorsque je valide le formulaire et que le champ de confirmation de l'email ou du mot de passe est vide, alors une erreur apparait. J'utilise pour ça la fonction "notEmpty" du Validator (Voir ci-dessous).

Cependant, lorsque j'entre un adresse email ou un mot de passe de confirmation qui n'est pas identique au premier, la vérification n'affiche aucune erreur et le formulaire est validé.

Voici ci-dessous les différentes fichiers et fonctions utilisées :

UsersTable.php

public function validationAccount(Validator $validator)
 {        
       $validator
                ->notEmpty('email');

        $validator
                ->notEmpty('confirm_email')
                ->add('confirm_email', 'no-misspelling', [
        'rule' => ['compareWith', 'email'],
        'message' => 'Les mails ne sont pas égaux',
    ]);

        $validator
            ->notEmpty('password');

        $validator
                ->notEmpty('confirm_email')
                ->add('confirm_password', 'no-misspelling', [
        'rule' => ['compareWith', 'password'],
        'message' => 'Les mot de passe ne sont pas égaux',
    ]);

         return $validator;
}

create_account.php

 <?= $this->Form->create($user, ['context' => ['validator' => 'account'], 'url' => '/users/create_account']) ?>
        <fieldset>
            <legend ></legend>
            <legend class="title_create_account" ><?= __('Create Account') ?></legend>
            <?php
                echo $this->Form->input('email', ['id' => 'email', 'type' => 'email', 'name' => 'email', 'label' => false, 'placeholder' => __('email').'*']);
                echo $this->Form->input('confirm_email', ['id' => 'confirm_email', 'type' => 'email', 'name' => 'confirm_email', 'label' => false, 'placeholder' => __('confirm email').'*' ]);
                echo $this->Form->input('password', ['id' => 'password', 'type' => 'password', 'name' => 'password', 'label' => false, 'placeholder' => __('password').'*' ]);
                echo $this->Form->input('confirm_password', ['id' => 'confirm_password', 'type' => 'password', 'name' => 'confirm_password', 'label' => false, 'placeholder' => __('confirm password').'*' ]);
            ?>
        </fieldset>
        <?= $this->Form->button( __('Submit') , array('class' => 'submit-class btn btn-block google btn-corridor') ) ?>
        <?= $this->Form->end() ?>

UsersController.php

public function createAccount()
    {               
        $this->viewBuilder()->layout('layout_create_account'); 

        $user = $this->Users->newEntity();

        if (!empty($this->request->data)) {
                $myRequest = $this->request->data;
                $user = $this->Users->patchEntity($user, $myRequest);

                $user->email = $myRequest['email'];
                $user->password = $myRequest['password']; 

                    if ($this->Users->save($user)) {
                        $id = $user->id;                          
                    } else {
                        $this->Flash->error(__('The user could not be saved. Please, tare some certified users at this adress with different house type.'));
                }
        }
        $this->set('user',$user);
    }

Merci !!

6 réponses


Yo!

Ta méthode validationAccount(Validator $validator) se situe dans quelle classe?

Salut houceni,

Voici ma classe contenant la méthode validationAccount(Validator $validator)

/**
 * Users Model
 *
 */
class UsersTable extends Table
{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('users');
        $this->displayField('id');
        $this->primaryKey('id');

    }

    public function validationAccount(Validator $validator)
    {

        $validator
                ->notEmpty('email');

        $validator
                ->notEmpty('confirm_email')
                ->add('confirm_email', 'no-misspelling', [
        'rule' => ['compareWith', 'email'],
        'message' => 'Les mails ne sont pas égaux',
    ]);

        $validator
            ->notEmpty('password');

        $validator
                ->notEmpty('confirm_email')
                ->add('confirm_password', 'no-misspelling', [
        'rule' => ['compareWith', 'password'],
        'message' => 'Les mot de passe ne sont pas égaux',
    ]);

        return $validator;
    }

    /**
     * Returns a rules checker object that will be used for validating
     * application integrity.
     *
     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
     * @return \Cake\ORM\RulesChecker
     */
    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->isUnique(['email']));
        return $rules;
    }
}

Merci !

Ta méthode doit se nommer validationDefault et non pas validationAccount

@houceni : Merci pour ton retour mais cela ne change pas grand chose à mon problème.

Le check de validation de l'email et du mot de passe n'est toujours pas pris en compte.

Avant ton save, essaye un $user->errors() et voit s'il te met tes erreurs

@houceni : Désolé pour le temps de réponse.

Avec la fonction $user->errors() rien ne s'affiche.

Du coup il ne m'a pas l'air d'y avoir d'erreur....

Merci,