misd-service-development / phone-number-bundle

时间:2016-07-05 09:14:10

标签: php symfony

我正在使用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”,因为它首先按字母顺序排列。或者我是否以错误的方式理解“默认区域”?

1 个答案:

答案 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}