rit*_*ter 4 timezone utc symfony
在我的系统中,数据库时间戳记录为UTC值.
每个用户的个人资料中都记录了一个时区.登录时,时区值将从其配置文件传输到其会话($ session-> set('timezone',$ tz);).
我的大多数代码都使用Sonata INTL包,因此用户可以看到正确显示其时区的日期时间值,表单字段除外.
我最近在一些Symfony2类型上发现了model_timezone和view_timezone字段.我可以让字段显示正确的值(如下面的代码片段所示),但是我想了解如何从用户会话填充view_timezone?(我猜我可以通过某种方式传递$选项?)
事件控制器片段:
$object = <object loaded>;
$form = $this->createForm(new MyEventType(), $object);
Run Code Online (Sandbox Code Playgroud)
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',
));
Run Code Online (Sandbox Code Playgroud)
解决这个问题的方法有两个:
我已更新我的代码段以反映所需的更改:
事件控制器片段:
$object = <object loaded>;
$form = $this->createForm(new MyEventType(), $object, array(
'view_timezone' => $this->container->get('session')->get('timezone'))
);
Run Code Online (Sandbox Code Playgroud)
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',
));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3256 次 |
最近记录: |