我正在使用misd-service-development/phone-number-bundle和Symfony3。电话号码的输入字段包含两个字段:使用国家/地区选择,使用其他数字的简单输入文本。我想要做的是在表单中创建记录时选择默认国家/地区(区域)。
实体列如下所示:
/**
* @var string
* @ORM\Column(type="phone_number", nullable=false)
* @Assert\NotBlank()
* @AssertPhoneNumber(defaultRegion="PL")
*/
private $phoneOne;
...用于创建字段的构建器函数如下所示:
->add('phoneOne', PhoneNumberType::class, [
'label' => 'Telefon 1',
'widget' => PhoneNumberType::WIDGET_COUNTRY_CHOICE,
'default_region' => 'PL',
'preferred_country_choices' => [
'PL', 'CN', 'DE', 'GB', 'FR',
],
])
...但是在选择字段上,默认选择的选项仍为“CN”,因为它首先按字母顺序排列。或者我是否以错误的方式理解“默认区域”?
答案 0 :(得分:1)
你好我有同样的问题,我为解决这个问题所做的是创建一个表单扩展并覆盖这样的buildView方法
class PhoneNumberTypeExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$default_region = $options['default_region'];
if($default_region !== PhoneNumberUtil::UNKNOWN_REGION){
$form->get('country')->setData($default_region);
}
parent::buildView($view, $form, $options);
}
/**
* Returns the name of the type being extended.
*
* @return string The name of the type being extended
*/
public function getExtendedType()
{
return PhoneNumberType::class;
}
}
在services.yml
restauprive.phone_number_type_extension:
class: UserBundle\Form\Extension\PhoneNumberTypeExtension
tags:
- { name: form.type_extension, extended_type: Misd\PhoneNumberBundle\Form\Type\PhoneNumberType}