2013-01-21 10 views
7

Come impostare i filtri datetime o data negli amministratori di dati datasore di sonata?Come impostare il formato per data/ora e data nei filtri di amministrazione di sonata symfony2

voglio fare quanto segue per i filtri sonata di amministrazione, che lavora per modificare forma

->add('createdAt', 'datetime', array('label' => 'Created at', 'disabled' => true, 
        'input' => 'datetime', 
        'date_widget' => 'choice', 
        'time_widget' => 'choice', 
        'date_format' => 'MMM d, y',)) 

->add('deadline', 'date', array('label' => 'Deadline', 'disabled' => true, 
        'input' => 'datetime', 
        'widget' => 'choice', 
        'format' => 'MMM d, y')) 

ma non funziona (o le opzioni vengono ignorate) se usato in filtri utilizzando doctrine_orm_date e doctrine_orm_datetime

Il motivo per cui sono costretto a farlo è che, sul mio server (centos 5.2, php 5.3.20 alcune domande riguardanti questo problema ma nessuna soluzione reale. Questi 2 link descrivono il problema principale del mio problema - ad es. symfony2 - date choice input renders timestamp instead of month name, http://iqwen.net/question/155068

quindi vorrei sapere 3 cose

  1. come impostare l'opzione di formattazione per i campi datetime/data nei filtri sonata di amministrazione
  2. C'è un modo per risolvere il problema in cui mese appare come data/ora su linux env
  3. Come posso impostare un'opzione di formato globale per il campo data/datetime in symfony2/sonata admin in modo da non dover specificare il formato accanto a ciascun campo

Qualsiasi aiuto per quanto riguarda sarà molto apprezzato.

+0

Si potrebbe voler dare un'occhiata a [questo] (http://stackoverflow.com/a/10433153/1553481) o [questo] (http://stackoverflow.com/a/16289056/1553481). – likeitlikeit

+0

dopo aver aggiornato i bundle del fornitore a 2.2, questo problema si è risolto da solo. – dagger

risposta

1

Si può fare in questo modo:

->add('createdAt', 'doctrine_orm_callback', 
       array(
       'label' => 'Created At', 
       'callback' => function($queryBuilder, $alias, $field, $value) { 
           if (!$value['value']) { 
            return; 
           } 
           $time = strtotime($value['value']); 
           $inputValue = date('Y-m-d', $time); 
           $queryBuilder->andWhere("DATE($alias.createdAt) <= :CreatedAt"); 
           $queryBuilder->setParameter('CreatedAt', $inputValue); 
           return true; 
           }, 
       'field_type' => 'text' 
      ), null, array('attr' => array('class' => 'datepicker'))) 

La funzione DATE è un cast che si definisce con DQL.

Problemi correlati