odolbeau / phone-number-bundle
将 libphonenumber 集成到您的 Symfony 应用程序中
Requires
- php: >=8.1
- giggsey/libphonenumber-for-php: ^8.9
- symfony/framework-bundle: ^5.4 || ^6.3 || ^7.0
- symfony/intl: ^5.4 || ^6.3 || ^7.0
- symfony/polyfill-mbstring: ^1.28
Requires (Dev)
- doctrine/doctrine-bundle: ^1.12|^2.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.6.11
- symfony/form: ^5.4 || ^6.3 || ^7.0
- symfony/phpunit-bridge: ^7.0
- symfony/property-access: ^5.4 || ^6.3 || ^7.0
- symfony/serializer: ^5.4 || ^6.3 || ^7.0
- symfony/twig-bundle: ^5.4 || ^6.3 || ^7.0
- symfony/validator: ^5.4 || ^6.3 || ^7.0
Suggests
- doctrine/doctrine-bundle: Add a DBAL mapping type
- symfony/form: Add a data transformer
- symfony/property-access: Choose a path in the validation constraint
- symfony/serializer: Serialize/deserialize phone numbers using Symfony library
- symfony/twig-bundle: Format phone numbers in Twig templates
- symfony/validator: Add a validation constraint
Replaces
- misd/phone-number-bundle: v4.0.1
- v4.0.1
- v4.0.0
- dev-master / 3.10.x-dev
- v3.10.0
- v3.9.3
- v3.9.2
- v3.9.1
- v3.9.0
- v3.8.0
- v3.7.0
- v3.6.3
- v3.6.2
- v3.6.1
- v3.6.0
- v3.5.0
- v3.4.2
- v3.4.1
- v3.4.0
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.1
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.0
- v2.0.2
- v2.0.1
- v2.0.0
- 1.3.x-dev
- v1.3.2
- v1.3.1
- v1.3.0
- 1.2.x-dev
- v1.2.0
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- 1.0.x-dev
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2024-09-07 13:16:31 UTC
README
此包是从 misd-service-development/phone-number-bundle 分支出来的。由于该项目似乎不再维护,我们决定创建并维护一个分支。
此包通过 giggsey/libphonenumber-for-php 端口将 Google 的 libphonenumber 集成到您的 Symfony 应用程序中。
安装
- 使用 Composer 下载 PhoneNumberBundle
$ composer require odolbeau/phone-number-bundle
如果您使用 Symfony Flex,那就只需这样做!否则
- 在您的应用程序中注册此包
// 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_layout
、bootstrap_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_region
和format
选项分别为PhoneNumberUtil::UNKNOWN_REGION
和PhoneNumberFormat::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文件。