Bonjour
Comment personnaliser le séparateur entre les trois listes du type: DateType.
merci.
Bonjour
Comment personnaliser le séparateur entre les trois listes du type: DateType.
merci.
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 :
Dans la classe DateFieldType :
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 ); ?>
\vendor\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php
A ajouter après le $formatter, aux alentours de la ligne 38
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
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']); } ?>
Voilà,
.cwx
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.
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)
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.
Mon code :
Mon Formulaire:
Code ajouté dans la fonction buildForm() de DateType
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', ));
La fonction buildViewBottomUp():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(!is_null($options['pattern'])) { $formatter->setPattern($options['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é.
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); } }
donc, est ce qu'il faut toujours suivre la route : y min, M maj, d min ?
Merci pour la solution. c'est vraiment simple.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:
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
ok,
Donc à respecter :
petit "y" pour les années
grand "M" pour les mois
petit "d" pour les jours
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager