m-adamski / symfony-phone-number-bundle
用于与libphonenumber库集成的Symfony Bundle
4.0.0
2024-02-02 10:15 UTC
Requires
- php: >=8.2
- ext-json: *
- ext-mbstring: *
- giggsey/libphonenumber-for-php: ^8.13
- symfony/form: ^7.0
- symfony/framework-bundle: ^7.0
- symfony/intl: ^7.0
- symfony/twig-bundle: ^7.0
- symfony/validator: ^7.0
Requires (Dev)
- kint-php/kint: ^5.0
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