CakePHP validation règle automatiquement l'ajout d'un attribut obligatoire pour le domaine
Je suis l'aide d'une règle de validation personnalisée dans CakePHP pour vous assurer qu'une valeur est saisie dans un champ lors d'une case à cocher correspondante est marquée:
Voici la règle de validation au sein de mon modèle de validation de la matrice de...
'tv_price'=>array(
'check'=>array(
'rule'=>array('check_for_tv_price'),
'message'=>'Please enter the television pricing information.',
),
)
...et voici ma vraiment personnalisé simple fonction de validation:
public function check_for_tv_price($check) {
if($this->data['Client']['tv']==1&&$this->data['Client']['tv_price']=="") {
return false;
}
if($this->data['Client']['tv']==1&&$this->data['Client']['tv_price']!="") {
return true;
}
if($this->data['Client']['tv']==0) {
return true;
}
}
J'ai essayé d'ajouter 'required'=>false
et 'allowEmpty'=>true
à différents points de la validation de la matrice pour mon tv_price
champ, mais ils ont toujours la priorité sur ma règle personnalisée! En conséquence, un utilisateur ne peut pas envoyer le formulaire, car le navigateur empêche (en raison de l'attribut obligatoire).
Pour référence, le navigateur crache le code HTML suivant:
<input id="ClientTvPrice" type="text" required="required" maxlength="255" minyear="2013" maxyear="2018" name="data[Client][tv_price]"></input>
(Note de l'minyear et maxyear attributs sont de la forme par défaut.)
Quelqu'un a trouvé un moyen d'empêcher l'insertion automatique de la required
attribut lors de l'utilisation de règles de validation personnalisée?
Tous conseils seront très appréciés.
Merci!
Chris
- Comment une telle tâche simple peut être si difficile souffle mon esprit... Il n'y a pas une bonne solution pour ce. Il semble que l'on ne peut pas permettre la saisie de texte est vide, encore exécuter le reste des validations/custom validations définies. Frustrant comme l'enfer...
Vous devez vous connecter pour publier un commentaire.
Requis pour faux et allowEmpty à true, cela devrait le faire pour vous.
Espère que cette aide.
'required' => false
n'est pas nécessaire, c'est la valeur null par défaut. Juste le'allowEmpty' => true
est suffisante pour assurer l' 'required' attribut n'est pas ajouté à l'élément d'entrée.'allowEmpty'=>true
à la validation de la matrice et il semble fonctionner. J'ai tourné sur l'attribut obligatoire lorsque la case est cochée (voir ci-dessus pour le code JS)Ces semble 2.3 nouveau HTML5 genre de choses magiques.
Essayez d'ajouter
'formnovalidate' => true
à la$this->FormHelper->input()
options dans la vue.ref:
http://book.cakephp.org/2.0/en/appendices/2-3-migration-guide.html#formhelper
http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::input
Merci pour les commentaires!
Après enquête, j'ai effectivement ne voulez l'attribut requis allumé lorsque le formulaire est cochée; pour atteindre ce que j'ai écrit deux simples fonctions JavaScript (et utilisé un troisième que j'ai trouvé en ligne) pour vérifier le statut actuel de l'cases à cocher et cochez le champ requis le cas échéant.
Dans le fichier de vue, j'ai ajouté la fonction d'appels en deux endroits. Le premier bloc est dans le onload de la fonction et est appelée lorsque la fenêtre est chargé:
Ces sont un gâchis, je sais. Mais ils ont travaillé!
Remarque les champs qui apparaissent lorsque la case est cliqué sont enfermés dans un div avec un nom qui est utilisé dans la toggle_setup fonction pour afficher ou cacher la div en tant que de besoin. Dans ce cas, j'ai nommé la div 'tvPrice'
Et voici les fonctions JavaScript eux-mêmes:
Le code ci-dessus utilise une classe CSS appelé "caché" que j'ai défini comme ci-dessous:
Par les suggestions ci-dessus, j'ai ajouté les
'required'=>false
et'allowEmpty'=>true
lignes de ma validation de la matrice et il semble fonctionner.Je vous remercie pour toute l'aide!