2013-03-04 3 views
4

В моей системе отметки времени базы данных записываются как значения UTC.Symfony2 Отображение даты и времени с часовым поясом в формах

Каждый пользователь имеет часовой пояс, записанный в их профиле. При входе в систему значение часового пояса переносится из их профиля на их сеанс ($ session-> set ('timezone', $ tz);).

В большинстве моих кодов используется пакет Sonata INTL, поэтому пользователи видят значения даты и времени, отображаемые правильно для своего часового пояса, , за исключением в полях формы.

Недавно я обнаружил поля model_timezone и view_timezone на некоторых типах Symfony2. Я могу заставить поля показать правильные значения (как показано в нижеприведенных фрагментах кода), однако я хотел бы понять, как я могу заполнить view_timezone из сеанса пользователя? (Я предполагаю, что я могу передать в $ варианты каким-то образом?)

Событие контроллера фрагмент кода:

$object = <object loaded>; 

$form = $this->createForm(new MyEventType(), $object); 

MyEventType Форма сниппет:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('id', null, array(
     'label'   => 'Event ID', 
    )); 

    $builder->add('changed', 'datetime', array(
     'date_widget'  => 'single_text', 
     'date_format'  => \IntlDateFormatter::SHORT, 
     'time_widget'  => 'single_text', 

     'model_timezone' => 'UTC', 
     'view_timezone'  => 'Pacific/Auckland', 
    )); 
+0

И, Что проблема? Вы можете добавить значение сеанса в параметр «view_timezone» – Hast

+0

Привет, Хаст, я думаю, вопрос должен быть сформулирован: «Как мне получить значение сеанса в форме?» У меня есть несколько форм, которые имеют поля datetime. Поэтому используемый подход должен быть легко воспроизводимым. – ritter

ответ

5

Решение этой проблемы является два -fold:

  • Передайте массив параметров методу createForm, содержащий ваше значение для 'view_timezone'
  • Убедитесь, что 'view_timezone' определен в настройках по умолчанию.

Я обновил свои фрагменты кода, чтобы отразить необходимые изменения:

Событие контроллера фрагмент кода:

$object = <object loaded>; 

$form = $this->createForm(new MyEventType(), $object, array(
    'view_timezone' => $this->container->get('session')->get('timezone')) 
); 

MyEventType Форма сниппет:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('id', null, array(
     'label'   => 'Event ID', 
    )); 

    $builder->add('changed', 'datetime', array(
     'date_widget'  => 'single_text', 
     'date_format'  => \IntlDateFormatter::SHORT, 
     'time_widget'  => 'single_text', 

     'model_timezone' => 'UTC', 
     'view_timezone'  => $options['view_timezone'], 
    )); 

... 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class'  => 'Stuff\CoreBundle\Entity\MyEvent', 
     'view_timezone'  => 'UTC', 
    )); 
} 
+0

Что делать, если у меня есть поле часового пояса в форме с полем даты, и я хочу использовать этот часовой пояс при сохранении даты? – adityap