Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2011, 11h47   #1
Invité régulier
 
Inscription : août 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 33
Points : 6
Points : 6
Par défaut Comment contrôler date fin > date début dans un form ?

Bonjour,

j'ai un formulaire avec une date début et une date de fin,
j'aimerai contrôler que la date de fin est supérieure à la date de début

voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
class Application_Form_Recherche extends Zend_Form
{
 
    public function init()
    {
          ...		
		// instanciation d'un objet champ date avec calendrier (dojo)
		$DateDebut = new Zend_Dojo_Form_Element_DateTextBox('DateDebut');
		$DateDebut->setLabel('Date debut')
				->setRequired(true)
				->addFilter('StripTags')
				->addFilter('StringTrim')
				->addValidator('NotEmpty')
				->setValue(date("Y-m-d", $hier));
 
		$DateFin = new Zend_Dojo_Form_Element_DateTextBox('DateFin');
		$DateFin->setLabel('Date Fin')
				->setRequired(true)
				->addFilter('StripTags')
				->addFilter('StringTrim')
				->addValidator('NotEmpty')
				->setValue(date("Y-m-d", $hier));
...
merci
intik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h59   #2
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Bonjour Intik,

ce que tu peux faire c'est créer un validateur personnalisé sur l'exemple du validateur LessThan mais qui va comparer deux dates?

Pour cela tu peux aller voir l'api, il y a des méthodes pour faire la comparaison de deux dates... cf. http://framework.zend.com/apidoc/core/

C'est une proposition.....
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h59   #3
Invité régulier
 
Inscription : août 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 33
Points : 6
Points : 6
Merci flilou,

ça a l'air de marcher le Zend_Validate_GreaterThan :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$DateDebut = new Zend_Dojo_Form_Element_DateTextBox('DateDebut');
		$DateDebut->setLabel('Date debut')
				->setRequired(true)
				->addFilter('StripTags')
				->addFilter('StringTrim')
				->addValidator('NotEmpty')
				// ->addValidator(new Zend_Validate_LessThan(array('max' => $DateFin->getValue())))
				->setValue(date("Y-m-d", $hier));
 
		$DateFin = new Zend_Dojo_Form_Element_DateTextBox('DateFin');
		$DateFin->setLabel('Date Fin')
				->setRequired(true)
				->addFilter('StripTags')
				->addFilter('StringTrim')
				// ->addValidator('NotEmpty')
				->addValidator(new Zend_Validate_GreaterThan(array('min' => $_POST['DateDebut'])))
				->setValue(date("Y-m-d", $hier));
mais la page n'est pas bloquée quand les dates ne sont pas bonnes (Date fin < Date début) et la redirection se fait sur la page suivante .
comment peut on bloquer l'action du formulaire quand on veux afficher le message d'erreur ?

peut être ajouter une condition dans mon contrôleur sur
Code :
$form->setAction($redirection)->setMethod('post');
???

merci
intik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h53   #4
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
J'ai codé récemment un validateur personnalisé pour cette problématique récurrente, basé sur le validateur standard between :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
 
class Application_Validate_DateBetween extends Zend_Validate_Between
{
    public function setMax($max)
    {
        return parent::setMax(new Zend_Date($max));
    }
 
    public function setMin($min)
    {
        return parent::setMin(new Zend_Date($min));
    }
 
    protected function _setValue($value)
    {
        return parent::_setValue(new Zend_Date($value));
    }
 
    public function isValid($value)
    {
        $this->_setValue($value);
 
        if ($this->_inclusive) {
            if ($this->_value->compare($this->_min) < 0 or $this->_value->compare($this->_max) > 0) {
                $this->_error(self::NOT_BETWEEN);
                return false;
            }
        } else {
            if ($this->_value->compare($this->_min) <= 0 or $this->_value->compare($this->_max) >= 0) {
                $this->_error(self::NOT_BETWEEN_STRICT);
                return false;
            }
        }
        return true;
    }
}
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 16h44   #5
Invité régulier
 
Inscription : août 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 33
Points : 6
Points : 6
dans mon controleur si je fais la condition :

Code :
1
2
3
4
if($this->getRequest()->isPost())
{
     $form->setAction($redirection)->setMethod('post');
}
quand il y a une erreur je reste bien sur ma page avec le message d'erreur
mais je suis obligé de cliquer 2 fois sur le bouton pour avoir la redirection quand il n'y a pas d'erreur

quelqu'un aurait une solution ?

merci
intik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 09h00   #6
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
un moyen de faire une redirection serait:
Code :
1
2
 
$this->_redirect($redirection); // ou $redirection est le lien de ta redirection
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 09h14   #7
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Tu n utilise pas isValid pour vérifier tes formulaires? Car c est cette méthode qui renvoi les messages ou continue et je ne la voit pas dans ton code
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 09h32   #8
Invité régulier
 
Inscription : août 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 33
Points : 6
Points : 6
si si, j'utilise isValid dans mon controleur,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if ($this->getRequest()->isPost()) 
		{
			$formData = $this->getRequest()->getPost();
 
			if ($form->isValid($formData)) 
			{			
 
				$DateDebut = $form->getValue('DateDebut');
				$DateFin = $form->getValue('DateFin');
 
				$form->setAction($redirection)->setMethod('post');
 
			} else 
			{
 
				$form->populate($formData);
			}
 
		}
mais je suis obligé de cliquer 2 fois sur le bouton pour avoir la redirection.
intik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 10h26   #9
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
tu n'as pas besoin du populate c'est utile quand tu récupérer des informations de la base de données normalement c'est automatique par contre à la fin tu devrais passer ton formulaire à la vue et il n'en ai rien.

Tu ne fais pas de redirection, tu change seulement l'action de ton formulaire c'est donc normal que ça fonctionne au deuxième clique.

Tu veux rediriger vers quoi et pourquoi?

Pour rediriger tu as
Code :
$this->_helper->redirector('index');
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h09.


 
 
 
 
Partenaires

Hébergement Web