src/Form/Type/CountryPhoneType.php line 16

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type;
  4. use App\Form\DataTransformer\CountryPhoneTransformer;
  5. use libphonenumber\PhoneNumberUtil;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  8. use Symfony\Component\Form\Extension\Core\Type\TextType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\OptionsResolver\OptionsResolver;
  12. class CountryPhoneType extends AbstractType
  13. {
  14.     private CountryPhoneTransformer $transformer;
  15.     private ?string $currentLanguage;
  16.     public function __construct(CountryPhoneTransformer $transformerRequestStack $requestStack)
  17.     {
  18.         $this->transformer $transformer;
  19.         $this->currentLanguage $requestStack->getCurrentRequest()?->getLocale() ?? 'en';
  20.     }
  21.     public function buildForm(FormBuilderInterface $builder, array $options)
  22.     {
  23.         $phoneUtil PhoneNumberUtil::getInstance();
  24.         $regions $phoneUtil->getSupportedRegions();
  25.         $prefixChoices = [];
  26.         foreach ($regions as $region) {
  27.             $countryCode $phoneUtil->getCountryCodeForRegion($region);
  28.             $countryName \Locale::getDisplayRegion('-' $region$this->currentLanguage) . " (+{$countryCode})";
  29.             $prefixChoices[$countryName] = $countryCode;
  30.         }
  31.         $builder
  32.             ->add('country_code'ChoiceType::class, [
  33.                 'label' => 'pages.common.component.phone.countryCode',
  34.                 'choices' => $prefixChoices,
  35.                 'preferred_choices' => $options['preferred_choices'],
  36.             ])
  37.             ->add('phone_number'TextType::class, [
  38.                 'label' => 'pages.common.component.phone.number',
  39.                 'attr' => [
  40.                     'maxlength' => 20,
  41.                     'pattern' => '[0-9+]*',
  42.                 ],
  43.             ])
  44.         ;
  45.         $builder->addModelTransformer($this->transformer);
  46.     }
  47.     public function configureOptions(OptionsResolver $resolver)
  48.     {
  49.         $resolver->setDefaults([
  50.             'preferred_choices' => [],
  51.         ]);
  52.         $resolver->setAllowedTypes('preferred_choices', ['array'\Traversable::class, 'callable''string'PropertyPath::class, PreferredChoice::class]);
  53.     }
  54. }