Bu nedenle, yerel saatte bir etkinlik için bir tarih belirlemek için seçenekleri göstermek, ancak bunu UTC'de symfony standardı olarak kaydetmek istiyorum. 5 farklı Timezon değeri olan 5 farklı Kullanıcı segmentim var. Bir kullanıcı bir formda yeni bir aktivite ayarlayabilir. Her kullanıcı varlığının kendi saat dilimi kümesi vardır. Sorum şu, dönüşümü nerede ayarlayabilirim? Oturum açmış bir kullanıcı oturum durumunda kullanıcı var.Symfony buildForm datetime öğesini yerel olarak ve utc'ye dönüştürebilir
FormBuilder'ı çağırdığım ControllerAction'da?
FormBuilder'da?
Form oluşturucu benim için hala biraz bulanık ve içinde çok şey olduğunu biliyorum. basitleştirilmiş
formBuilder:
public function buildForm(FormBuilderInterface $builder, array $options)
{
//...
$builder->add('name');
$builder->add('startDate', DateTimeType::class, array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
)
);
$builder->add('endDate', DateTimeType::class, array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
)
);
//...
$builder->add('submit', SubmitType::class, array('attr' => array('class' => 'button')));
}
ControllerAction:
public function activityAction(Request $request, Activity $activity){
$variables = array();
/**
* TODO Determine User Local timezone and store as UTC
*
*/
$user = $this->get('security.token_storage')->getToken()->getUser();
$timezone = $user->getTimezone();
$activity = new Activity();
$form = $this->createForm(ActivityType::class, $activity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$activity->setName($form->get('name')->getData());
/**
*
* Maybe here, (I've just realized)
* Because earlier, the form just handled the datetime without conversion
* And just stored them in the DB as they where
*
*/
// Example: $timezone = 'Europe/London';
$date = new DateTime();
$date->setTimestamp($form->get('startDate')->getData());
$date->setTimezone(new DateTimeZone($timezone));
$activity->setStartDate($date->format("Y-m-d H:i:s"));
$date = new DateTime();
$date->setTimestamp($form->get('endDate')->getData());
$date->setTimezone(new DateTimeZone($timezone));
$activity->setEndDate($date->format("Y-m-d H:i:s"));
$em = $this->getDoctrine()->getManager();
$em->persist($activity);
$em->flush();
}
elseif ($form->isSubmitted() && !$form->isValid()) {
$variables['message'] = 'Something went wrong!';
}
$variables["title"] = "Create Activty";
$variables["form"] = $form->createView();
return $this->render('AcmeBundle:SomeViews:activity.html.twig', $variables);
}
Yani, iman Sadece sormak beni zorlar Kendi sorumu, Yanıtım; Bu kongre/en iyi uygulama nasıl yapılır?
Teşekkür ederiz! Ben benim dev makine CEST ve UTC üzerinde üretim sunucusunda olduğunu fark edene kadar saçımı çekiyordum. Ama bu hile yaptı! – Conjak