Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-10-2010 14:34:27

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

[ZF 1.10][Zend_Form] Formatage des nombres

Après la saisie d'un nombre 999999999,99 dans une Form,

je la réaffiche avec le nombre au format 999 999 999,99

Je rencontre un problème : comment filtrer les 'whitespaces' avant de renvoyer une seconde fois ma form ?

Comment corriger l'exemple ? je n'ai pas trouvé de filtre qui face çà.

Code:

$montant = new Zend_Form_Element_Text('montant', array(
    'label' => 'Montant TTC',

    'filters'=>array('alnum'),    // supprime les whitespaces ... mais aussi la virgule !!
    'filters'=>array('localizedtonormalized'), // supprime les whitespace, 
                     //mais change la ',' en '.'  (fait planter le validator 'float')
  'required'=>true,
  'validators'=>array(
                      'NotEmpty',
                       array('StringLength', false, array(1,10) ),
                       'Float' // la locale fr intervient 1,23 OK  1.23 PAS OK
                        )
        ));

Dernière modification par jean (20-10-2010 12:37:41)

Hors ligne

 

#2 19-10-2010 17:35:11

My_Sic
Membre
Date d'inscription: 06-09-2010
Messages: 49
Site web

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Et si tu passe la locale fr à ton filter localizedtonormalized, cela ne fonctionne-t-il pas ?


http://www.centurion-project.org: Full stack Framework based on Zend Framework; led by:
http://www.octaveoctave.com: an enthusiastic web agency full of passionate.
http://www.cache-pistache.com: French blog on ZF and SF perfomance

Hors ligne

 

#3 20-10-2010 08:58:04

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Zend_Locale est déjà stockée en registre dans le bootstrap. C'est pour cela que mon validator 'float' valide 1,23 mais refuse 1.23.

Je pensais qu'un filtre "standard" permettait de supprimer les whitespaces, tout en conservant la notation française ','

Si je ne trouve pas, je vais faire un simple filtre regex.

Dernière modification par jean (20-10-2010 08:59:24)

Hors ligne

 

#4 20-10-2010 09:22:23

My_Sic
Membre
Date d'inscription: 06-09-2010
Messages: 49
Site web

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Tente ainsi :

Code:

$montant = new Zend_Form_Element_Text('montant', array(
    'label' => 'Montant TTC',
    'filters'=>array('alnum'), 
    'filters'=>array(array('localizedtonormalized', array('locale' => 'fr'))), 
  'required'=>true,
  'validators'=>array(
                      'NotEmpty',
                       array('StringLength', false, array(1,10) ),
                       'Float'
                        )
        ));

http://www.centurion-project.org: Full stack Framework based on Zend Framework; led by:
http://www.octaveoctave.com: an enthusiastic web agency full of passionate.
http://www.cache-pistache.com: French blog on ZF and SF perfomance

Hors ligne

 

#5 20-10-2010 10:37:17

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [ZF 1.10][Zend_Form] Formatage des nombres

@My_Sic : le filtre 'alnum' ne va laisser passer ni le point ni la virgule.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#6 20-10-2010 12:51:26

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Nouvel essai avec PregReplace (équivalent d'un filtrer avec un regex).

Là, les valeurs POSTées sont bien filtrées ( 999 999 999,99 devient 999999999,99)
   ... MAIS IMPOSSIBLE d'afficher un montant lorsque je fais un $this->populate($valeurs)
   ... la variable $valeurs["montant"]='9 999 999,99' ne s'affiche pas dans la form.
   ... si j'enlève le filter, la variable $valeurs["montant"]='9 999 999,99' s'affiche dans la form.

Je croyais que les filtres ne s'activaient que lorsqu'on POSTait la form. Est-ce le cas ?

D'où peut venir mon problème ?

Code:

$montant = new Zend_Form_Element_Text('montant', array(
    'label' => 'Montant TTC',

    'filters'=>array(array(
                           'filter'=>'PregReplace',
                                          'options'=>array(
                                                      'match'=>'/\s+/',
                                                      'replace'=>''
                                           ))),
  'required'=>true,
  'validators'=>array(
                      'NotEmpty',
                       array('StringLength', false, array(1,16) ),
                       'Float' // la locale fr intervient 1,23 OK  1.23 PAS OK
                        )
        ));

Dernière modification par jean (20-10-2010 12:54:08)

Hors ligne

 

#7 20-10-2010 17:21:56

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Je pense avoir trouvé la solution à mon problème, mais je voudrais avoir votre avis.

Dans une form, lorsqu'on ajoute un filtre, il est exécuté :

- une première fois lors du render de la form (car je fais un populate des valeurs)
- une seconde fois lors du POST de la form


Donc, si je mets un filtre du type NormalizedToLocalized pour une valeur numérique,

- le populate contient la valeur 99999.99 (format 'en_US')
- le render de la form affiche 99 999,99  (format 'fr_FR')
- le POST de la form réapplique le filtre NormalizedToLocalized sur 99 999,99 et çà pose problème...

ETES VOUS D'ACCORD AVEC LE FONCTIONNEMENT DECRIT ?

Le contournement que j'ai trouvé :
- le populate contient la valeur 99 999,99 (j'effectue la transformation au format fr AVANT le populate)
- la form ne contient aucun filtre
- j'ai juste un  Zend_Validate_Float('fr_FR') pour m'assurer que ',' est utilisé au lieu de '.' lors du POST
- APRES avoir récupéré les valeurs, j'effectue la transformation au format 99999.99

AVEZ-VOUS QQ CHOSE DE PLUS SIMPLE A PROPOSER ?

Jean

Dernière modification par jean (21-10-2010 08:36:15)

Hors ligne

 

#8 20-10-2010 18:46:11

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [ZF 1.10][Zend_Form] Formatage des nombres

Pourquoi ne pas ajouter ton filtre seulement s'il n'y a pas de POST ?  Dans l'action évidemment.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages