m-adamski/symfony-phone-number-bundle

用于与libphonenumber库集成的Symfony Bundle

4.0.0 2024-02-02 10:15 UTC

This package is auto-updated.

Last update: 2024-08-31 00:26:42 UTC


README

这是一个将 libphonenumber 库集成到 Symfony 4 项目的自定义 PhoneNumber Bundle。此 Bundle 受 PhoneNumberBundle 启发,但进行了简化并专为个人项目创建。

此 Bundle 与 Symfony 4.1 和 Symfony 5.0 兼容。已放弃对 Symfony 3.4 的兼容性。

安装

使用 Composer 将此 Bundle 安装到 Symfony 4 项目中

$ composer require m-adamski/symfony-phone-number-bundle

配置

config/packages/doctrine.yaml 中注册新的 Doctrine 类型

doctrine:
    dbal:
        types:
            phone_number: Adamski\Symfony\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType

此 Bundle 为 Bootstrap 4 提供类型模板。在 config/packages/twig.yaml 中注册它

twig:
    form_themes:
        - '@PhoneNumber/Form/phone_number_widget.html.twig'

您还可以通过将 - '@PhoneNumber/Form/bootstrap_4_layout.html.twig' 添加到 form_themes 参数中来覆盖默认的 Symfony Bootstrap 4 模板

twig:
    form_themes:
        - '@PhoneNumber/Form/bootstrap_4_layout.html.twig'
        - '@PhoneNumber/Form/phone_number_widget.html.twig'

如何使用?

Bundle 提供了额外的 Doctrine 类型和表单类型。首先,编辑实体以使用 PhoneNumber 类型

use Adamski\Symfony\PhoneNumberBundle\Model\PhoneNumber;
use Adamski\Symfony\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;

/**
 * @var string
 * @AssertPhoneNumber
 * @ORM\Column(name="phone_number", type="phone_number", nullable=true)
 */
protected $phoneNumber;

现在,是时候对表单类型进行更改了

use Adamski\Symfony\PhoneNumberBundle\Form\PhoneNumberType;

public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add("phoneNumber", PhoneNumberType::class, [
            "label"     => "Phone number",
            "preferred" => "PL",
            "required"  => false
        ]);
}

在模板中显示的电话号码可以按照给定的模式进行格式化。为此,实现了 Twig 的 phone_number 过滤器。

{{ current_customer.phoneNumber|phone_number('E164') }}
{{ current_customer.phoneNumber|phone_number('RFC3966') }}
{{ current_customer.phoneNumber|phone_number('NATIONAL') }}
{{ current_customer.phoneNumber|phone_number('INTERNATIONAL') }}

许可证

MIT