misd/phone-number-bundle

此包已被弃用且不再维护。作者建议使用 odolbeau/phone-number-bundle 包。

将libphonenumber集成到您的Symfony2-Symfony4应用程序中

安装次数: 7,466,904

依赖项: 17

建议者: 1

安全: 0

星标: 447

关注者: 24

分支: 129

开放问题: 62

类型:symfony-bundle

v1.3.2 2018-01-18 09:06 UTC

README

此包已被弃用,推荐使用 odolbeau/phone-number-bundle

Build Status Total Downloads Downloads per month Latest stable version License

此扩展包通过 giggsey/libphonenumber-for-php 端口将Google的libphonenumber集成到您的Symfony2-Symfony4应用程序中。

安装

  1. 使用Composer下载PhoneNumberBundle
        $ composer require misd/phone-number-bundle
  1. 在您的应用程序中注册该扩展包
        // app/AppKernel.php

        public function registerBundles()
        {
            $bundles = array(
                // ...
                new Misd\PhoneNumberBundle\MisdPhoneNumberBundle()
            );
        }

使用

服务

以下服务可用

服务 ID libphonenumber版本
libphonenumber\PhoneNumberUtil libphonenumber.phone_number_util
libphonenumber\geocoding\PhoneNumberOfflineGeocoder libphonenumber.phone_number_offline_geocoder >=5.8.8
libphonenumber\ShortNumberInfo libphonenumber.short_number_info >=5.8
libphonenumber\PhoneNumberToCarrierMapper libphonenumber.phone_number_to_carrier_mapper >=5.8.8
libphonenumber\PhoneNumberToTimeZonesMapper libphonenumber.phone_number_to_time_zones_mapper >=5.8.8

要将字符串解析为 libphonenumber\PhoneNumber 对象

    $phoneNumber = $container->get('libphonenumber.phone_number_util')->parse($string, PhoneNumberUtil::UNKNOWN_REGION);

Doctrine映射

需要 doctrine/doctrine-bundle

要持久化 libphonenumber\PhoneNumber 对象,请将 Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType 映射添加到应用程序的配置中

    // app/config.yml

    doctrine:
        dbal:
            types:
                phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType

然后您可以使用 phone_number 映射

    /**
     * @ORM\Column(type="phone_number")
     */
    private $phoneNumber;

这将创建一个具有Doctrine映射注释的 varchar(35)

请注意,如果您将 phone_number 类型放在已存在的模式上,当前值必须转换为 libphonenumber\PhoneNumberFormat::E164 格式。

模板化

Twig

phone_number_format

可以使用 phone_number_format 过滤器来格式化电话号码对象。可以将 libphonenumber\PhoneNumberFormat 常量作为参数传递,以指定号码应该以哪种格式打印。

例如,要以 libphonenumber\PhoneNumberFormat::NATIONAL 格式格式化名为 myPhoneNumber 的对象

    {{ myPhoneNumber|phone_number_format('NATIONAL') }}

默认情况下,电话号码以 libphonenumber\PhoneNumberFormat::INTERNATIONAL 格式格式化。

phone_number_of_type

可以使用 phone_number_of_type 测试来检查电话号码是否与特定类型匹配:必须传递 libphonenumber\PhoneNumberType 常量名称以指定号码必须匹配的类型。

例如,要检查名为 myPhoneNumber 的对象是否为 libphonenumber\PhoneNumberType::MOBILE 类型

    {% if myPhoneNumber is phone_number_of_type('MOBILE') }} %} ... {% endif %}

PHP 模板

format()

phone_number_helper 中的 format() 方法接受两个参数:一个 libphonenumber\PhoneNumber 对象和一个可选的 libphonenumber\PhoneNumberFormat 常量名称或值。

例如,要将 $myPhoneNumber 格式化为 libphonenumber\PhoneNumberFormat::NATIONAL 格式,可以使用以下方法:

    <?php echo $view['phone_number_helper']->format($myPhoneNumber, 'NATIONAL') ?>

    <?php echo $view['phone_number_helper']->format($myPhoneNumber, \libphonenumber\PhoneNumberFormat::NATIONAL) ?>

默认情况下,电话号码以 libphonenumber\PhoneNumberFormat::INTERNATIONAL 格式格式化。

isType()

phone_number_helper 中的 isType() 方法接受两个参数:一个 libphonenumber\PhoneNumber 对象和一个可选的 libphonenumber\PhoneNumberType 常量名称或值。

例如,要检查 $myPhoneNumber 是否为 libphonenumber\PhoneNumberType::MOBILE 类型

    <?php if $view['phone_number_helper']->isType($myPhoneNumber, 'MOBILE'): ?>
    ...
    <?php endif; ?>

    <?php if $view['phone_number_helper']->isType($myPhoneNumber, \libphonenumber\PhoneNumberType::MOBILE): ?>
    ...
    <?php endif; ?>

序列化 libphonenumber\PhoneNumber 对象

需要 jms/serializer-bundle

libphonenumber\PhoneNumber 的实例会自动以 E.164 格式进行序列化。

可以通过将类型设置为 libphonenumber\PhoneNumber 从国际格式反序列化电话号码。例如

    use JMS\Serializer\Annotation\Type;

    /**
     * @Type("libphonenumber\PhoneNumber")
     */
    private $phoneNumber;

在表单中使用 libphonenumber\PhoneNumber 对象

您可以使用 PhoneNumberType (对于 Symfony 2.7 为 phone_number)表单类型创建电话号码字段。有两种小部件可供选择。

单行文本字段

单行文本字段允许用户输入完整的电话号码。如果没有输入国际前缀,则假定该号码是 default_region 集的一部分。例如

    use libphonenumber\PhoneNumberFormat;
    use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
    use Symfony\Component\Form\FormBuilderInterface;

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('phone_number', PhoneNumberType::class, array('default_region' => 'GB', 'format' => PhoneNumberFormat::NATIONAL));
    }

默认情况下,default_regionformat 选项分别是 PhoneNumberUtil::UNKNOWN_REGIONPhoneNumberFormat::INTERNATIONAL

国家选择字段

电话号码可以拆分为国家选择和电话号码文本字段。这允许用户从可定制的列表中选择相关国家,并输入电话号码而无需国际拨号。

    use libphonenumber\PhoneNumberFormat;
    use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
    use Symfony\Component\Form\FormBuilderInterface;

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('phone_number', PhoneNumberType::class, array('widget' => PhoneNumberType::WIDGET_COUNTRY_CHOICE, 'country_choices' => array('GB', 'JE', 'FR', 'US'), 'preferred_country_choices' => array('GB', 'JE')));
    }

这产生了首选的“泽西岛”和“联合王国”,以及常规的“法国”和“美国”选择。

默认情况下,country_choices 为空,这意味着包括所有国家,同样 preferred_country_choices 也是这样。可以指定 country_placeholder 选项以在列表上方创建占位符选项。

验证电话号码

您可以使用 Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber 约束来确保一个 libphonenumber\PhoneNumber 对象或一个纯字符串是一个有效的电话号码。例如

    use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;

    /**
     * @AssertPhoneNumber
     */
    private $phoneNumber;

您可以通过 defaultRegion 属性设置默认区域

    use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;

    /**
     * @AssertPhoneNumber(defaultRegion="GB")
     */
    private $phoneNumber;

默认情况下,任何有效的电话号码都将被接受。您可以通过 type 属性来限制类型,可识别的值

  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::ANY (默认)
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::FIXED_LINE
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::MOBILE
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::PAGER
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::PERSONAL_NUMBER
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::PREMIUM_RATE
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::SHARED_COST
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::TOLL_FREE
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::UAN
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::VOIP
  • Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber::VOICEMAIL

(请注意,libphonenumber无法总是区分移动电话和固定电话号码(例如在美国),在这种情况下将被接受。)

    /**
     * @AssertPhoneNumber(type="mobile")
     */
    private $mobilePhoneNumber;

翻译

该组件包含表单字段和验证约束的翻译。

在某些使用多个术语来指代移动电话的语言中,通用语言区域将使用“mobile”这一术语,而特定国家区域将使用相应的术语。例如,在英语中,en 使用“mobile”,en_US 使用“cell”,而 en_SG 使用“handphone”。

如果你的语言还没有翻译,欢迎你提交一个pull request来添加它们!