Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Mon problème est lors de la validation d'un formulaire.
Je bloque dessus car il ne valide jamais et ne met pas d'erreurs.
Je fais tous à la main, je crée bien un formaulaire mais après j'affiche les éléments à la main car je trouve mon formulaire assez complexe pour le faire avec des propriété des éléments....
J'ai des RADIO et qunand je met required a true il me met comme message : "The input was not found in the haystack". Dans le formulaire je met bien :
Form.php :
$this->add(array( 'type' => 'Radio', 'name' => 'choix_garantie', 'attributes' => array( 'value' => 'Formule A : Dépendance totale', ), 'options' => array( 'label' => '', 'value_options' => array( 'Formule A : Dépendance totale' => 'Formule A : Dépendance totale <a href="javascript:void(0);" class="popover1" data-trigger="hover" data-html="true" data-placement="auto" data-toggle="popover" data-content="' . $this->_tabAide["choix_formuleA"] . '"><span class="glyphicon glyphicon-info-sign"></span></a>', 'Formule A : Dépendance totale et partielle' => 'Formule B : Dépendance totale et partielle <a href="javascript:void(0);" class="popover1" data-trigger="hover" data-html="true" data-placement="auto" data-toggle="popover" data-content="' . $this->_tabAide["choix_formuleB"] . '"><span class="glyphicon glyphicon-info-sign"></span></a>', ), 'disable_inarray_validator' => false ), ));
FormInputFilter.php :
$this->add(array( 'name' => 'choix_garantie', 'required' => true, 'validators' => array( array('name' => 'NotEmpty', 'options' => array( 'messages' => array( NotEmpty::IS_EMPTY => 'Le champs ne doit pas être vide !', ), )), ), ));
Une idée ?
Merci
Hors ligne
Je serais toi je commencerai par déclarer mon input radio différement:
[lang=php] $this->add(array( 'type' => 'Radio', 'name' => 'choix_formule', 'options' => array( 'label' => 'mylabel', 'value_options' => array( '1' => 'Formule A : ....', '2' => 'Formule B : ...', ), ), 'attributes' => array( 'value' => '1' //set checked to '1' ) ));
je ne pense pas que les accents soient conseillé dans les values
Dernière modification par flobrflo (07-04-2014 16:14:47)
Hors ligne
flobrflo a écrit:
Je serais toi je commencerai par déclarer mon input radio différement:
Code:
[lang=php] $this->add(array( 'type' => 'Radio', 'name' => 'choix_formule', 'options' => array( 'label' => 'mylabel', 'value_options' => array( '1' => 'Formule A : ....', '2' => 'Formule B : ...', ), ), 'attributes' => array( 'value' => '1' //set checked to '1' ) ));je ne pense pas que les accents soient conseillé dans les values
Bonjour,
J'ai testé avec ta méthode et cela ne change rien même message...
Hors ligne
Ben je te conseil de le faire qu'en même
Les buttons radios sont bien affichés? C'est que lorsque tu valide ton formulaire que tu a une erreur?
A quoi ressemble ton $_POST?
comment tu récupère les données et valide les infos?
Hors ligne
flobrflo a écrit:
Ben je te conseil de le faire qu'en même
Les buttons radios sont bien affichés? C'est que lorsque tu valide ton formulaire que tu a une erreur?
A quoi ressemble ton $_POST?
comment tu récupère les données et valide les infos?
Bonjour,
Merci ^^
Ils sont affiché mais à la validation il me retourne le formulaire en erreur.
je récup-ère le POST avec la bonne donnée....
Hors ligne
Sans plus d'infos ça va pas être facile lol
je n'utilise pas "'disable_inarray_validator' => false", donc je peu pas t'aider plus, mais c'est sur que ça viens de la :
http://framework.zend.com/manual/2.0/en … ml#inarray
Hors ligne
Salut, peux-tu nous donner ta classe formulaire et les actions de ton contrôleur qui envoient les données à la vue et celle qui valide le formulaire (généralement c'est la même) en plus des infos que flobrflo te demande. Sans ça pas facile de t'aider.
flobrflo a écrit:
je n'utilise pas "'disable_inarray_validator' => false", donc je peu pas t'aider plus, mais c'est sur que ça viens de la :
http://framework.zend.com/manual/2.0/en … ml#inarray
Oui c'est lié une petite recherche google lui aurait permis de trouver
Hors ligne
Orkin a écrit:
Salut, peux-tu nous donner ta classe formulaire et les actions de ton contrôleur qui envoient les données à la vue et celle qui valide le formulaire (généralement c'est la même) en plus des infos que flobrflo te demande. Sans ça pas facile de t'aider.
flobrflo a écrit:
je n'utilise pas "'disable_inarray_validator' => false", donc je peu pas t'aider plus, mais c'est sur que ça viens de la :
http://framework.zend.com/manual/2.0/en … ml#inarrayOui c'est lié une petite recherche google lui aurait permis de trouver
re,
Classe du formulaire :
<?php namespace Site\Form; use Zend\Form\Element; use Zend\Form\Form; use Zend\Captcha; use Zend\Captcha\Image; class DevisForm extends Form { public function __construct($urlcaptcha = null) { parent::__construct(''); $this->setName('devis'); $this->setAttribute('method', 'post'); $this->setAttribute('novalidate', 'novalidate'); $this->setAttribute('class', 'form-horizontal devis'); /* * Choix de Garantie Dépendance */ $this->add(array( 'type' => 'Radio', 'name' => 'choix_garantie', 'attributes' => array( 'value' => 'Formule A : Dépendance totale', ), 'options' => array( 'label' => '', 'value_options' => array( 'Formule A : Dépendance totale' => 'Formule A : Dépendance totale <a href="javascript:void(0);" class="popover1" data-trigger="hover" data-html="true" data-placement="auto" data-toggle="popover" data-content="' . $this->_tabAide["choix_formuleA"] . '"><span class="glyphicon glyphicon-info-sign"></span></a>', 'Formule A : Dépendance totale et partielle' => 'Formule B : Dépendance totale et partielle <a href="javascript:void(0);" class="popover1" data-trigger="hover" data-html="true" data-placement="auto" data-toggle="popover" data-content="' . $this->_tabAide["choix_formuleB"] . '"><span class="glyphicon glyphicon-info-sign"></span></a>', ), 'disable_inarray_validator' => false ), ));
Filter :
<?php namespace Site\Form; use Zend\InputFilter\InputFilter; use Zend\Validator\NotEmpty; use Zend\Validator\StringLength; use Zend\Validator\EmailAddress; use Zend\Captcha; use Zend\Captcha\Image as CaptchaImage; use Zend\Captcha\AbstractAdapter; use Zend\Captcha\AbstractWord; class DevisFormInputFilter extends InputFilter { public function __construct() { /* * Choix de Garantie Dépendance */ $this->add(array( 'name' => 'choix_garantie', 'required' => true, 'validators' => array( array('name' => 'NotEmpty', 'options' => array( 'messages' => array( NotEmpty::IS_EMPTY => 'Le champs ne doit pas être vide !', ), )), ), ));
Action :
public function formdevisAction() { $form = new DevisForm($this->getRequest()->getBaseUrl() . '/data/captcha/'); $form->setInputFilter(new DevisFormInputFilter()); $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) {die("FORM VALIDE"); $this->renderer = $this->getServiceLocator()->get('ViewRenderer'); $html = $this->renderer->render('site/tpl/devis', null); $formDatas = $form->getData(); foreach ($formDatas as $key => $value) { if (is_string($value)) ${$key} = utf8_decode($value); else ${$key} = $value; $html = str_replace("[[" . $key . "]]", $value, $html); } //echo $html;die; $getContact = $this->getServiceLocator()->get('mail.contact'); $transport = $this->getServiceLocator()->get('mail.transport'); $email = new Email($transport, $getContact['from']); $email->envoyer($getContact['to'], "Envoi d'un message du site", $html); return $this->redirect()->toRoute('site', array('action' => 'sendsuccess')); } } return array( "form" => $form ); }
Hors ligne
Ca pique les yeux .
Pour ton formulaire, implements l'interface InputFilterProviderInterface et met ton inputFilter directement dans le formulaire (dans la méthode que tu vas devoir implémenter, la doc ZF2 explique comment faire).
Si tu retires cette ligne
[lang=php]'disable_inarray_validator' => false
de ton formulaire ça donne quoi ?
Concernant les routes j'en est un peu marre de me répéter ...
Hors ligne
Orkin a écrit:
Si tu retires cette ligne
Code:
[lang=php]'disable_inarray_validator' => falsede ton formulaire ça donne quoi ?
Wé, à priori tu n'en a pas besoin.
Hors ligne
que je mette cette ligne ou pas cela ne change rien ....
Hors ligne
Essai d'implémenter l'inputfilter comme Orkin te l'a conseillé,
une fois ça propre, si tu à toujours l'erreur envois nous ton $_POST.
EDIT : ou ton $request->getPost() hein (^^)
Dernière modification par flobrflo (07-04-2014 17:15:01)
Hors ligne
si je comprends bien d'après la doc Zend 2 je lis que le inputFilter se fait au model de donnée ?
Je me trompe ?
[EDIT] Hors mois pour le devis (formulaire) je n'ai pas de base de donnée car les résultats seront envoyés par email....
Dernière modification par Paul75 (07-04-2014 17:26:30)
Hors ligne
Non le inputFilter se fait en fonction de ton formulaire. D'ailleurs pour que ça soit propre il aurait fallu que ça soit à ton fieldset mais tu es déjà perdu donc on va pas en rajouter une couche .
L'inputFilter sert uniquement à valider les données de ton formulaire et les filtrer. Ca s'enregistre pas tout seul hein .
Hors ligne
J'ai jamais dis que cela enregistre tous seul hein ^^
Je suis perdu dans Zend 2 ..... J'apprends petit à petit. J'essaye de voir sur le site de Zend.....
Que je me perde pas :
dans le form : class DevisForm extends Form implements InputFilterProviderInterface
/**
* @return array
*/
public function getInputFilterSpecification()
{
return array(
'civilite_adherent' => array(
'required' => true,
'validators' => array(
array('name' => 'NotEmpty', 'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => 'Le champs ne doit pas être vide !',
),
)),
),
),
'civilite_conjoint' => array(
'required' => false
),
);
}
Dernière modification par Paul75 (07-04-2014 17:34:47)
Hors ligne
Bah tu parles de modèles de données et tout et c'est pas super clair :p. Donc non ça dépend pas que de ça. Ca n'a pas de sens si tu as un champ qui ne peut pas être null et dans ton formulaire tu le mets pas en requis ça va planter.
Hors ligne
Bonjour,
J'ai donc fais comme tu m'a demandé Orkin (il me semble) J'ai mis les validateurs dans getInputFilterSpecification et cela me donne toujours l'erreur (The input was not found in the haystack)....
Cela ne se produit que sur les RADIO....
Je ne vois pas d'où cela viendrais..... Dans ZF1 on sesactivais le Array des radio et cela fonctionnais ....
Merci
Hors ligne
si tu met un input text avec le même name et value ça mets pas d'erreur?
Hors ligne
Là je sèche :s. J'ai jamais eu à désactiver les array etc ... Là en gros ça veut dire que la valeur qui est saisie (cochée) n'est pas dans la liste des valeurs autorisées. Mais pourquoi ça te fait ça je vois pas là
Hors ligne
Orkin justement c'est quand il est pas coché que cela se produit .... Quand c'est coché cela marche bien....
Merci
Hors ligne
Ah . Peut être une piste met un required => false dans le getInputFilterSpecification pour choix_garantie
Hors ligne
oui mais dans ce cas le champ ne sera plus obligatoire ? Alors que je le veux obligatoire ?
Ou dans ce cas je dois le cocher un par défaut ?
Merci
Hors ligne
Bah non mais faut savoir ce que tu veux ... En fait t'as pas de problème, si c'est un champs requis et que tu soumets le formulaire c'est normal qu'il ne soit pas validé et qu'il te dise que le choix saisi ne corresponde pas à ceux possible.
Hors ligne
oui mais dans ce cas le message apparait oki mais il en apparait 2 ......
Bref j'ai résolu le problème en mettant une valeur par défaut ....
Hors ligne
Pages: 1