Je construisez lentement mes compétences Zend en construisant des sites Web utilitaires pour mon propre usage. J'utilise Zend Forms et formulaires de validation et j'ai jusqu'à présent été heureux que je comprenais la façon de faire des choses. Cependant, je suis un peu confus avec comment utiliser zend_validate_db_norecordexistes () dans le contexte d'un formulaire d'édition et d'un champ qui correspond à la colonne de base de données qui doit être unique.
Par exemple, en utilisant cette table simple P>
$form = new Form() if (is Post) { $formData = GetPostData() if ($form->isValid($formData)) { Update Table with $formData Redirect out of here } else { $form->populate($formData) } } else { $RowData = Get Data from Table $form->populate($RowData) <=== This is where I want ('value' => $Value) bound }
7 Réponses :
Vous pouvez simplement appeler $ Form-> getElement (entrée ') -> supprimerValidator (' zend_validator_db_norecordexistes '); code> au lieu de fournir l'exclusion. P>
@Le gars - qui semblerait vaincre le but de veiller à ce que les données soient uniques avant de faire la mise à jour de la DB pendant le cycle d'édition. Je pense que cela a également pour effet de polluer le contrôleur avec quelque chose qui appartient à la forme.
Ouais, je suis d'accord c'est un peu pirate. Je ne suis en fait pas très heureux de la façon dont Zend_form fonctionne actuellement. Bien que j'utilise toujours une vieille implémentation de style ZF 1.6: P
Guy - je n'ai commencé avec 1,9 en décembre seulement, alors j'apprends toujours des choses - mais des choses comme ça me font partir "hmmmm?"
Surveillez: Supprimer la validation est un danger potentiel pour votre table de base de données. Cela signifie que vous êtes en mesure de mettre à jour un enregistrement de la même valeur qu'un autre enregistrement qui était exactement ce que vous voulez prévenir.
Après avoir examiné la réponse écrasante, j'ai décidé que je vais avec un validateur personnalisé p>
Voici comment ça se fait:
p> p> p> p> c'est ça! p> p>
$form = new Form_Test(array('id'=>$id));
Je viens d'essayer cet exemple pour 1] sous ma forme: strong> p> adresse e-mail code> l'unicité et cela fonctionne parfaitement avec des trucs ci-dessous:
$form->getElement('email')
->addValidator('Db_NoRecordExists',
false,
array('table' => 'guestbook',
'field' => 'email',
'exclude' => array ('field' => 'id', 'value' => $request->get('id'))));
if ($this->getRequest()->isPost()) {
if ($form->isValid($request->getPost())) {
Cela fonctionnera également:
$this->addElement('text', 'email', array( 'label' => 'Your email address:', 'required' => true, 'filters' => array('StringTrim'), 'validators' => array( 'EmailAddress', array('Db_NoRecordExists', true, array( 'table' => 'guestbook', 'field' => 'email', 'messages' => array( 'recordFound' => 'Email already taken' ) ) ) ) ));