Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
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 10/08/2011, 12h40   #1
Invité régulier
 
Homme
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 5
Points : 6
Points : 6
Par défaut Validator StartDate EndDate Symfony

Bonjour,

J'écris ce post car je me heurte à un problème pour la validation d'un formulaire sous symfony, j'ai deux champs : start_date et end_date et j'aimerais récupérer la valeur du champs start_date rentré par l'utilisateur pour spécifier une valeur minimale au end_date (par exemple end_date >= (start_date+2mois)) et sous symfony je peux spécifier une end_date minimale en fonction de la date actuelle mais pas en fonction de la date rentrée dans le start_date, voici le code que j'ai actuellement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
//widget du startDate
$this->widgetSchema['start_date'] = new sfWidgetFormJQueryDate(array('image' => '/images/calendar.png', 'date_widget' => $dateWidget));
 
//validator du startDate
$this->validatorSchema['start_date'] = new sfValidatorDate(array("min" => strtotime("-1 day")), array("min" => "La date doit être supérieure à %min%"));
 
//widget du endDate
$this->widgetSchema['end_date'] = new sfWidgetFormJQueryDate(array('image' => '/images/calendar.png', 'date_widget' => $dateWidget));
 
//validator du endDate
$this->validatorSchema['end_date'] = new sfValidatorDate(array("min" => strtotime("+60 days")), array("min" => "La date doit être supérieure à %min%"));
Si quelqu'un à une idée pour concevoir ce genre de validateur je suis preneur parce que là je galère un peu...
Fab6363 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 12h21   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Il faut utiliser un postvalidateur, lui seul aura accès aux données de plusieurs validateurs.

Donc, le validateur pour chaque dates pour vérifier qu'elles sont saisie, qu'elles sont des dates...

Et après, le postvalidateur qui va vérifier que l'une est bien postérieur à l'autre.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h03   #3
Invité régulier
 
Homme
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 5
Points : 6
Points : 6
Citation:
Envoyé par Michel Rotta Voir le message
Il faut utiliser un postvalidateur, lui seul aura accès aux données de plusieurs validateurs.

Donc, le validateur pour chaque dates pour vérifier qu'elles sont saisie, qu'elles sont des dates...

Et après, le postvalidateur qui va vérifier que l'une est bien postérieur à l'autre.
Bonjour michel,

J'avais déjà regardé du côté des postvalidator avec les sfValidatorSchemaCompare mais je ne peux pas faire d'opérations dessus.. Et c'est justement ce qui m'intéresserai, j'ai essayé de récupéré la date dans le postvalidateur et de la visualisé en timestamp pour pouvoir donner à la enddate la valeur minimale que l'utilisateur doit rentré mais sans succès...
Fab6363 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/08/2011, 19h13   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
En relisant ta demande je me pose plusieurs questions.

Tu veux afficher la date en directe sur la page en fonction de la date saisie ? Si oui, c'est du côté de javascript qu'il va falloir jouer.

Tu veux garantir que la deuxième date saisie est bien entre moins deux et moins trois mois ? Alors c'est plutôt un validateur dédié qu'il faudra mettre en œuvre.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h05   #5
Invité régulier
 
Homme
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 5
Points : 6
Points : 6
Non je ne veux pas le faire en javascript car si le plugin est mis à jour le travail sera perdu et ce n'est pas ce que je recherche de toute façon.

Ce que je veux c'est pouvoir faire quelque chose comme ça:
Code :
1
2
3
4
5
 
$this->validatorSchema->setPostValidator(
new sfValidatorSchemaCompare('end_date', sfValidatorSchemaCompare::GREATER_THAN, 'start_date+Xjours',
array('throw_global_error' =>true),
array('invalid' => 'The end date %left_field% must be grater than %right_field%')));
Bien sur j'ai essayer d'inséré un strtotime à la place de 'start_date+Xjour' mais sans succès c'est pour cela que j'ai mis la demande sur le forum.
Fab6363 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 18h50   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Le sfValidatorSchemaCompare ne peut se trouver que dans un PostValidator, si non, il n'aura pas accès à tous le champs.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h39   #7
Invité régulier
 
Homme
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 5
Points : 6
Points : 6
Citation:
Envoyé par Michel Rotta Voir le message
Le sfValidatorSchemaCompare ne peut se trouver que dans un PostValidator, si non, il n'aura pas accès à tous le champs.
Là tu ne fais que commenter mon code ...

Bon la seule solution qui s'offre à moi est de faire un validateur personnalisé, donc quand je le ferais je n'oublierais pas de le poster et de mettre le sujet en résolu.
Fab6363 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 10h02   #8
Invité régulier
 
Homme
Étudiant
Inscription : août 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 5
Points : 6
Points : 6
Résolu !

Voilà après avoir continuer de travailler sur mon site, je suis revenu sur mon problème et j'ai pu enfin le résoudre. La solution était de surcharger la méthode doBind dans le form pour travailler sur les valeurs du end date. Pour ceux que ça intéresse je fais tourner le code qui m'a permis de faire ceci :

Code :
1
2
3
4
5
6
7
8
 
// on récupère d'abord la valeur de la start date dans une variable $date
$date = strtotime($values['start_date']['day']."/".$values['start_date']['month']."/".$values['start_date']['year']);
// Ensuite on ajoute la valeur minimale que l'on veut pour le end date
$date = strtotime("+ 5 month", $date);
 
// Enfin on met en place le validateur pour cette end date
$this->validatorSchema['end_date'] = new sfValidatorDate(array("min" => $date), array("min" => "La date doit être supérieure à %min%"));
Voilà en esperant que cela pourra aider du monde pour l'avenir

Merci quand même à Michel Rotta d'avoir essayé de résoudre mon problème
Fab6363 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web