IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Champ date dans le formulaire [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut Champ date dans le formulaire
    Bonjour

    Comment personnaliser le séparateur entre les trois listes du type: DateType.

    merci.

  2. #2
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    Tu peux spécifier le pattern au moment de la création de ton formulaire mais pour l'instant cela ne fonctionne pas sauf modification du code source de Symfony (j'ai rapporté un bug sur leur tracker : http://trac.symfony-project.org/ticket/9736 )

    Infos sur le DateType : http://symfony.com/doc/2.0/reference...ypes/date.html


    Je te fais quand même le détail :

    Dans ta classe de formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $builder->add('madate','date',array(
    'pattern'=>'d-M-Y' // Ici le séparateur sera un tiret
    );
    ?>
    Dans la classe DateFieldType :
    \vendor\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php

    A ajouter après le $formatter, aux alentours de la ligne 38

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    if(!is_null($options['pattern']))
    {
     $formatter->setPattern($options['pattern']);
    }
    ?>
    NB: Ne pas oublier que le pattern est basé sur l'option format (MEDIUM par défaut), plus d'infos ici : http://php.net/manual/fr/class.intldateformatter.php

    Voilà,

    .cwx

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut
    Bonjour,
    Merci pour la réponse.

    J'ai fait ce que tu m'as dit mais toujours mon pattern n'est pas appliqué.

    Le pattern est passé dans la fonction "buildForm()" de la classe \vendor\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php, mais quand j'essayais de récupérer mon pattern dans la fonction ''buildViewBottomUp()", oup mon pattern n'est plus là.

    merci d'avance.

  4. #4
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Bizarre,

    Je viens de retester et chez moi c'est ok :

    1. Définition du pattern dans la classe du formulaire
    2. ajouter le code setPattern dans la fonction buildForm de la classe dateType

    Question:

    Qu'obtiens tu si tu fais un echo $pattern dans le buildViewBottomUp ?

    Et encore plus important, quel est le pattern que tu donnes en paramètre dans ta classe de formulaire ??? (car pour les mois par exemple c'est un M en majuscule sinon ca ne passera pas)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Je ne crois pas que modifier les classes de symfony soit une super idée.
    A la moindre mise à jour, il y a un risque de perdre son travail.


    Voici une solution similaire mais plus élégante:

    Dans la classe de ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function buildForm(FormBuilder $builder, array $options)
    {
    $builder
       ->add('madate','date')
    //.. et tout le tralala avec d'autres champs...
    ;
    $builder->get('madate')
                  ->getAttribute('formatter')
                     ->setPattern('d-M-y')
                ; 
    }
    Un petit si la réponse convient. Merci.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut
    Mon code :

    Mon Formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            $builder->add('date_rappel', 'date', array(
                'years' => range(date('Y') , date('Y') + 1),
                'format' => \IntlDateFormatter::FULL, 
                'pattern' => 'y///M///d',
            ));
    Code ajouté dans la fonction buildForm() de DateType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            if(!is_null($options['pattern']))
            {
                $formatter->setPattern($options['pattern']);
            }
    La fonction buildViewBottomUp():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        public function buildViewBottomUp(FormView $view, FormInterface $form)
        {           
            $view->set('widget', $form->getAttribute('widget'));
     
            if ($view->hasChildren()) {
     
                $pattern = $form->getAttribute('formatter')->getPattern();
     
                echo $pattern;
     
                // set right order with respect to locale (e.g.: de_DE=dd.MM.yy; en_US=M/d/yy)
                // lookup various formats at http://userguide.icu-project.org/formatparse/datetime
                if (preg_match('/^([yMd]+).+([yMd]+).+([yMd]+)$/', $pattern)) {
                    $pattern = preg_replace(array('/y+/', '/M+/', '/d+/'), array('{{ year }}', '{{ month }}', '{{ day }}'), $pattern);
                } else {
                    // default fallback
                    $pattern = '{{ year }}-{{ month }}-{{ day }}';
                }
     
                $view->set('date_pattern', $pattern);
            }
        }
    le echo affiche bien mon pattern et il est appliqué, par contre si je voulais un pattern comme celui-ci: 'pattern' => 'd--M--Y', le echo affiche bien mon pattern mais il n'est jamais appliqué.

    donc, est ce qu'il faut toujours suivre la route : y min, M maj, d min ?

    Je ne crois pas que modifier les classes de symfony soit une super idée.
    A la moindre mise à jour, il y a un risque de perdre son travail.


    Voici une solution similaire mais plus élégante:
    Merci pour la solution. c'est vraiment simple.

  7. #7
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Une approche bien plus élégante en effet, merci pour l'info.

    J'espère cependant qu'ils corrigeront cela dans les prochaines releases, l'option time_pattern pour un field de type dateTime est totalement inactif par exemple.

    Je viens de tester et le comportement est un peu différent au niveau de la compréhension du pattern donnée mais je vais approfondir.

    .cwx

    Chez moi les patterns suivants fonctionnent en utilisant les conventions :

    d///M///y
    d--M--y

    petit "y" pour les années
    grand "M" pour les mois
    petit "d" pour les jours

    .cwx

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 96
    Points : 111
    Points
    111
    Par défaut
    ok,
    Donc à respecter :
    petit "y" pour les années
    grand "M" pour les mois
    petit "d" pour les jours

  9. #9
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Oui, ce n'est pas encore très au point. Il y a encore pas mal de restrictions.
    Un petit si la réponse convient. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LibreOffice][Tableur] Récupérer date d'un champ date dans un formulaire
    Par Eklaes dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 11/12/2014, 11h11
  2. Problème avec mon champ date dans le formulaire
    Par PetitChris dans le forum IHM
    Réponses: 4
    Dernier message: 28/08/2014, 09h37
  3. Joindre un calendrier à un champ Date dans un formulaire ?
    Par madina dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/07/2011, 22h27
  4. [Access-2003] trier le champ date dans un formulaire
    Par bastien3117 dans le forum IHM
    Réponses: 0
    Dernier message: 17/08/2009, 13h29
  5. controle sur un champ date dans un formulaire
    Par fraizas dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2007, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo