Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un petit soucis avec l'utilisation du validateur Db/NoRecordExist.
Je définis les InputFilter d'un formulaire (que j'utilise en création ET en modification) dans mon modèle.
Je souhaiterais vérifier que la valeur d'un champs du formulaire est unique (n'existe pas en BDD). Pour cela, j'utilise le validateur Db/NoRecordExist dans mon InputFilter.
Le problème est le suivant: en création, pas de pb. En édition, le validateur indique que le champs existe déjà (normal, je suis en train d'editer un enregistrement existant...).
Si je rajoute l'option Exclude dans le validateur, l'update fonction bien, mais en création, la vérification ne fonctionne plus (et je peux ainsi ajouter des doublons...)
Comment faire ?
Faut-il sortir la declaration InputFilter du modèle, et en faire 2 versions ? C'est-à-dire pour la creation, utilisation du Db/NoRecordExist sans l'option Exclude, et pour la modification utilisation de l'option Exclude ?
Ci-dessous, le code de mon modèle (sans le "superflu"):
class Category implements InputFilterAwareInterface { [...] // Différents attributs ici public function getInputFilter() { if (!$this->inputFilter) { $inputFilter = new InputFilter(); $inputFilter->add( array( 'name' => 'name', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 100, ), 'name' => 'Db\NoRecordExists', 'options' => array( 'adapter' => $this->dbAdapter, 'table' => 'category', 'field' => 'name', // Le probleme ici avec ou sans le exclude) 'exclude' => array( 'field' => 'id_category', 'value' => $this->id_category ) ) ), ), ) ); $inputFilter-> $inputFilter->add( array( 'name' => 'slug', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), array('name' => '\Jobeet\Filter\Slugify'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 100, ), ), ), ) ); $this->inputFilter = $inputFilter; } return $this->inputFilter; } }
Merci d'avance pour votre aide.
Hors ligne
Salut tu peux effectivement créer 2 input filter différent mais je pense que le plus propre serait lors de la création de ton formulaire en mode édition de simplement supprimer l'input filter Db/NoRecordExist comme ça pas de problème.
Hors ligne
pfou, je dois être fatigué moi pour pas y avoir pensé lol
C'est effectivement la solution la plus simple / propre... je vais regarder ça
Merci pour la réponse
Dernière modification par RomainB (13-06-2013 16:53:45)
Hors ligne