2013-01-21 14 views
7

Jak ustawić datetime lub daty filtry w datagramach sonata admin?Jak ustawić format datetime i daty w filtrach administratora sonata symfony2

Chcę wykonać następujące czynności dla filtrów sonata Administrator, który pracuje dla edycji postaci

->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')) 

ale to nie działa (lub opcje są ignorowane) gdy jest stosowany w filtrach wykorzystujących doctrine_orm_date i doctrine_orm_datetime

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

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

Powodem, dla którego jestem do tego zmuszony, jest to, że na moim serwerze (centos 5.2, php 5.3.20) pole miesiąca jest renderowane jako znacznik czasu, ale na moim komputerze dev jest renderowane idealnie - jest kilka pytań dotyczących tego problemu, ale żadnych prawdziwych poprawek. Te dwa linki opisują mój główny problem - np. symfony2 - date choice input renders timestamp instead of month name, http://iqwen.net/question/155068

więc chciałbym wiedzieć 3 rzeczy

  1. Jak ustawić format dla pola datetime/data w filtrach sonata administratora
  2. Czy istnieje sposób, aby rozwiązać problem, gdzie miesiąc pojawia się jako sygnatura czasowa na linux env
  3. Jak ustawić opcję formatu globalnego dla pola data/datetime w administratorze symfony2/sonata, aby nie musieć określać formatu przy każdym polu?

Każda pomoc dotycząca wiill jest bardzo doceniana.

+0

Możesz chcieć rzucić okiem na [to] (http://stackoverflow.com/a/10433153/1553481) lub [to] (http://stackoverflow.com/a/16289056/1553481). – likeitlikeit

+0

po tym, jak zaktualizowałem pakunki dostawców do wersji 2.2, problem ten rozwiązał się sam. – dagger

Odpowiedz

1

Można to zrobić w ten sposób:

->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'))) 

Funkcja DATA jest obsada, które można zdefiniować z DQL.