odolbeau/phone-number-bundle

将 libphonenumber 集成到您的 Symfony 应用程序中

安装次数: 6,226,930

依赖项: 10

建议者: 2

安全: 0

星标: 214

关注者: 10

分支: 143

开放问题: 6

类型:symfony-bundle

v4.0.1 2024-06-29 08:43 UTC

README

Build Status Latest stable version License

SWUbanner

此包是从 misd-service-development/phone-number-bundle 分支出来的。由于该项目似乎不再维护,我们决定创建并维护一个分支。

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

安装

  1. 使用 Composer 下载 PhoneNumberBundle
$ composer require odolbeau/phone-number-bundle

如果您使用 Symfony Flex,那就只需这样做!否则

  1. 在您的应用程序中注册此包
// app/AppKernel.php

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

misd/phone-number-bundle 更新

misd/phone-number-bundle 更新到 odolbeau/phone-number-bundle 应该非常简单。

更新您的 composer.json

-        "misd/phone-number-bundle": "^1.3",
+        "odolbeau/phone-number-bundle": "^3.0",

然后运行 composer update misd/phone-number-bundle odolbeau/phone-number-bundle

如果您使用由 misd/phone-number-bundle 定义的容器参数或别名,您可以使用 "odolbeau/phone-number-bundle": "^2.0" 直到您的项目清理完成。

使用方法

服务

以下服务可用

要将字符串解析为 libphonenumber\PhoneNumber 对象,请 注入服务

    $phoneNumber = $this->phoneNumberUtil->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 模板

如果任何 form_div_layoutbootstrap_3_*bootstrap_4_*bootstrap_5_* 布局已在您的 twig 配置中注册,则包将自动注册用于渲染 Misd\PhoneNumberBundle\Form\Type 表单类型的模板。

phone_number_format

可以使用 phone_number_format 过滤器来格式化电话号码对象。可以通过传递 libphonenumber\PhoneNumberFormat 常量作为参数来指定要打印的格式。

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

{{ 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 %}

在表单中使用 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('phoneNumber', PhoneNumberType::class, ['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('phoneNumber', PhoneNumberType::class, [
        'widget' => PhoneNumberType::WIDGET_COUNTRY_CHOICE,
        'country_choices' => ['GB', 'JE', 'FR', 'US'],
        'preferred_country_choices' => ['GB', 'JE']
    ]);
}

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

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

可以指定country_display_type选项来更改国家下拉标签的格式。有两种格式可用:

并且当将country_display_emoji_flag选项设置为true(默认为false)时,可以在标签前添加国家的emoji标志

验证电话号码

ℹ️ 使用不支持属性的Symfony或PHP版本?此捆绑包还支持作为注解的验证。请参阅旧文档

您可以使用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;

您还可以在捆绑包配置中设置默认区域

misd_phone_number:
    validator:
        default_region: GB

您还可以通过“regionPath”属性动态定义区域(例如,根据用户的区域)

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

#[AssertPhoneNumber(regionPath: 'countryCode')]
private $phoneNumber;

private $countryCode;

public function getCountryCode()
{
    return $this->countryCode;
}

默认情况下,任何有效的电话号码都将被接受。您可以通过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无法总是区分移动和固定电话号码(例如在美国),在这种情况下将被接受。)

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

#[AssertPhoneNumber(type: [AssertPhoneNumber::MOBILE])]
private $mobilePhoneNumber;

#[AssertPhoneNumber(type: [AssertPhoneNumber::FIXED_LINE, AssertPhoneNumber::VOIP])]
private $fixedOrVoipPhoneNumber;

翻译

此捆绑包包含表单字段和验证约束的翻译。

在某个语言使用多个术语表示移动电话的情况下,通用语言区域将使用“mobile”术语,而特定国家区域将使用相关术语。例如,在英语中,en使用“mobile”,en_US使用“cell”,而en_SG使用“handphone”。

如果您的语言还没有翻译,请随时提出拉取请求以添加它们!

配置

要禁用与组件的集成

misd_phone_number:
    twig: false
    form: false
    serializer: false
    validator: false

许可证

此捆绑包在MIT许可证下发布。有关详细信息,请参阅捆绑包中的LICENSE文件。