CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 10-04-2017 21:16:41

leknoppix
Brownie
Date d'inscription: 05-04-2012
Messages: 21

Validation d'un formulaire: désactivation d'un champs

Bonsoir à tous

Je suis en train de créer un formulaire. La validation fonctionne par contre, en fonction d'un champs <select>, il faudrait que la validation d'un de ces champs se désactive.
Voici la structure de mon code qui génère le formulaire:

Code: php

  1. <div class="table-responsive">
  2.     <ul class="nav nav-tabs nav-justified" role="tablist">
  3.         <li class="li_identify" role="presentation" class="active"><a href="#identity" aria-controls="identify" role="tab" data-toggle="tab">Identification</a></li>
  4.         <li class="li_present" role="presentation" ><a href="#present" aria-controls="present" role="tab" data-toggle="tab">Présentation dans le site</a></li>
  5.         <li class="li_authentification" role="presentation" ><a href="#authentification" class="authentification" aria-controls="authentification" role="tab" data-toggle="tab">Mot de passe</a></li>
  6.     </ul>
  7.     <br />
  8.     <?= $this->Form->create($user, ['type' => 'file']) ?>
  9.     <div class="tab-content">
  10.         <div id="identity" class="tab-pane active">
  11.             <?= $this->Form->input('username', ['label' => "Indiquez un nom d'utilisateur (utile pour l'identification)"]) ?>
  12.             <?= $this->Form->input('courriel', ['label' => "Indiquez une adresse mail (utile pour récupérer mot de passe)"]) ?>
  13.             <?= $this->Form->input('role', [
  14.                 'options' => ['admin' => __('Administrateur'), 'author' => __('Auteur'), 'member' => __("Membre")],
  15.                 'label' => __("Sélectionnez le role de ce membre")
  16.             ]) ?>
  17.             <?php
  18.             echo $this->Form->input('avatar', ['type' => 'file', 'label' => __('Sélectionnez une photo')]);
  19.             echo $this->Form->input('avatar_dir', ['type' => 'hidden']);
  20.             ?>
  21.         </div>
  22.         <div id="present" class="tab-pane">
  23.             <?= $this->Form->input('name', ['label' => "Indiquez son vrai prénom"]) ?>
  24.             <?= $this->Form->input('surname', ['label' => "Indiquez son vrai nom"]) ?>
  25.             <?= $this->Form->input('poste', ['label' => "Indiquez son poste dans l'équipe"]) ?>
  26.             <?= $this->Form->input('content', ['label' => "Description"]) ?>
  27.         </div>
  28.         <div id="authentification" class="tab-pane">
  29.             <fieldset class="bg-danger">
  30.                 <?= $this->Form->input('password', ['label' => "Veuillez indiquer un mot de passe"]) ?>
  31.                 <?= $this->Form->input('confirm_password', ['label' => "Veuillez indiquer un nouveau mot de passe"]) ?>
  32.                 <div class="cb"></div>
  33.             </fieldset>
  34.         </div>
  35.         <br />
  36.         <?= $this->Form->button(__('Ajouter ce membre')); ?>
  37.         <?= $this->Form->end() ?>
  38.     </div>
  39. </div>

Mon code jquery qui cache la div #authentification:

Code: php

  1. $(document).ready(function(){
  2.     //Si membre on cache la rubrique mot de passe
  3.     $('#role').on('click', function(){
  4.         cache($(this).val());
  5.     }).on('load', function(){
  6.         cache($(this).val());
  7.     });
  8.     $(".authentification.disabled a").on('click', function(e){
  9.         e.preventDefault();
  10.     })
  11. });
  12. function cache( content ){
  13.     if( content == 'member' ){
  14.         //je désactive la nav authentification
  15.         $(".li_authentification").addClass("disabled");
  16.         $(".li_authentification a ").attr("href","#");
  17.     }else{
  18.         $(".li_authentification").removeClass("disabled");
  19.         $(".li_authentification a ").attr("href","#authentification");
  20.     }
  21. }

Hors, lors de la validation, le script me demande de compléter les champs "cachés", ce qui est normal car ils sont demandés par ma validation.

Code: php

  1.    public function validationDefault(Validator $validator)
  2.     {
  3.         return $validator
  4.             ->notEmpty('username', "Un nom d'utilisateur est nécessaire")
  5.             ->notEmpty('password', 'Un mot de passe est nécessaire')
  6.             ->add('password', 'custom', [
  7.                 'rule' => [$this, 'passwordComplexe'],
  8.                 'message' => 'Le mot de passe ne respecte pas les règles (une majuscule minimum, un chiffre minimum, 8 caractères minimum).'
  9.             ])
  10.             ->add('password', [
  11.                 'compare' => [
  12.                     'rule' => ['compareWith', 'confirm_password'],
  13.                     'message' => 'Les mots de passe diffèrent.'
  14.                 ]
  15.             ])
  16.             ->notEmpty('password')
  17.             ->add('courriel', 'valid', [
  18.                 'rule' => 'email'
  19.             ])
  20.             ->add('courriel', [
  21.                 'unique' => [
  22.                     'rule' => 'validateUnique',
  23.                     'provider' => 'table',
  24.                     'message' => 'Un compte avec cette adresse existe déjà.'
  25.                 ]
  26.             ])
  27.             ->notEmpty('role', 'Un role est nécessaire')
  28.             ->notEmpty('name', "Un prénom est nécessaire")
  29.             ->notEmpty('surname', "Un nom est nécessaire")
  30.             ->notEmpty('content', "Merci de saisir une présentation de cette personne")
  31.             ->allowEmpty('avatar','update');
  32.     }

Vu que je génère mon formulaire en une seule fois, est-il possible de désactiver, à la volée, la validation sur le champs #password ?

Auriez-vous une idée ou une astuce?


leknoppix



EDIT

J'ai trouvé:

Code: php

  1. $(document).ready(function(){
  2.     //Si membre on cache la rubrique mot de passe
  3.     $('#role').on('click', function(){
  4.         cache($(this).val());
  5.     }).on('load', function(){
  6.         cache($(this).val());
  7.     });
  8.     $(".authentification.disabled a").on('click', function(e){
  9.         e.preventDefault();
  10.     })
  11. });
  12. function cache( content ){
  13.     if( content == 'member' ){
  14.         //je désactive la nav authentification
  15.         $(".li_authentification").addClass("disabled");
  16.         $(".li_authentification a ").attr("href","#");
  17.         $("#password").attr('disabled', 'disabled');
  18.         $("#confirm_password").attr('disabled', 'disabled');
  19.  
  20.     }else{
  21.         $(".li_authentification").removeClass("disabled");
  22.         $(".li_authentification a ").attr("href","#authentification");
  23.         $("#password").attr('disabled', false);
  24.         $("#confirm_password").attr('disabled', false);
  25.     }
  26. }

Dernière modification par leknoppix (10-04-2017 21:29:42)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr