Php Symfony时区类型表
在my symfony 3应用程序中,用户可以在表单中选择时区 所以我把它放在我的表格里如下:Php Symfony时区类型表,php,forms,symfony,time,timezone,Php,Forms,Symfony,Time,Timezone,在my symfony 3应用程序中,用户可以在表单中选择时区 所以我把它放在我的表格里如下: $builder ->add('timezone', TimezoneType::class) 这是工作,但我想个性化什么用户可以选择在列表中。 事实上,我看到了各个大陆的所有国家。列表太大,城市太多 我希望有一个只包含主要城市的较短列表,并将UTC放在每个城市之前。 有点像推特 例如: (UTC)伦敦 (UTC+01:00)巴黎 (UTC+02:00)雅典 (UTC+03:
$builder
->add('timezone', TimezoneType::class)
这是工作,但我想个性化什么用户可以选择在列表中。
事实上,我看到了各个大陆的所有国家。列表太大,城市太多
我希望有一个只包含主要城市的较短列表,并将UTC放在每个城市之前。
有点像推特
例如:
- (UTC)伦敦
- (UTC+01:00)巴黎
- (UTC+02:00)雅典
- (UTC+03:00)莫斯科
- 等等
谢谢您可以在时区类型中看到,Symfony通过以下方式获取时区:
private static function getFlippedTimezones()
{
if (null === self::$timezones) {
self::$timezones = array();
foreach (\DateTimeZone::listIdentifiers() as $timezone) {
$parts = explode('/', $timezone);
if (count($parts) > 2) {
$region = $parts[0];
$name = $parts[1].' - '.$parts[2];
} elseif (count($parts) > 1) {
$region = $parts[0];
$name = $parts[1];
} else {
$region = 'Other';
$name = $parts[0];
}
self::$timezones[$region][str_replace('_', ' ', $name)] = $timezone;
}
}
return self::$timezones;
}
您可以创建自己的类型或在表单中使用它,如
$choices = self::getCustomFlippedTimezones();
$builder
->add('timeZone', ChoiceType::class, array(
'choices' => $choices
))
对于可重用性:
// src/AppBundle/Form/Type/CustomTimeZoneType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class CustomTimeZoneType extends AbstractType
{
private static function getFlippedTimezones() { /*[...]*/}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => self::getCustomFlippedTimezones(),
'choices_as_values' => true,
));
}
public function getParent()
{
return ChoiceType::class;
}
}
您可能需要使用
选择类型
并创建自己的列表。从文档中:您可以手动指定选项,但是您应该直接使用ChoiceType。
您需要一个示例吗?我看到您过去在选择类型方面有问题,如果您仍然有问题,我可以举个例子。一旦你知道怎么做就很容易了。不,没关系,我在想时区中有一个选项,可以通过选择类型手册直接创建一个不同的列表。嘿,太好了,我需要在哪里创建getCustomFlippedTimezones()函数?在我的实体文件中?或者我需要直接从供应商处在时区存储库中进行更改?因为我想在其他表单中使用此函数。为了可重用性,您必须创建自己的表单类型。这很简单,不用担心:永远不要更改供应商目录中的任何内容,您将在以后支付价格;)