diff --git a/src/Eccube/Form/Type/PhoneNumberType.php b/src/Eccube/Form/Type/PhoneNumberType.php index 3dc1f1f99db..caee56c7543 100644 --- a/src/Eccube/Form/Type/PhoneNumberType.php +++ b/src/Eccube/Form/Type/PhoneNumberType.php @@ -17,7 +17,6 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TelType; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Validator\Constraints as Assert; @@ -56,8 +55,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) */ public function configureOptions(OptionsResolver $resolver) { - $eccubeConfig = $this->eccubeConfig; - $constraints = function (Options $options) use ($eccubeConfig) { + $resolver->setNormalizer('constraints', function($options, $value) { $constraints = []; // requiredがtrueに指定されている場合, NotBlankを追加 if (isset($options['required']) && true === $options['required']) { @@ -65,7 +63,7 @@ public function configureOptions(OptionsResolver $resolver) } $constraints[] = new Assert\Length([ - 'max' => $eccubeConfig['eccube_tel_len_max'], + 'max' => $this->eccubeConfig['eccube_tel_len_max'], ]); $constraints[] = new Assert\Type([ @@ -73,12 +71,10 @@ public function configureOptions(OptionsResolver $resolver) 'message' => 'form_error.numeric_only', ]); - return $constraints; - }; + return array_merge($constraints, $value); + }); $resolver->setDefaults([ - 'options' => ['constraints' => []], - 'constraints' => $constraints, 'attr' => [ 'placeholder' => 'common.phone_number_sample', ], diff --git a/tests/Eccube/Tests/Form/Type/Admin/OrderTypeTest.php b/tests/Eccube/Tests/Form/Type/Admin/OrderTypeTest.php index f7479037470..ed094d5a2a5 100644 --- a/tests/Eccube/Tests/Form/Type/Admin/OrderTypeTest.php +++ b/tests/Eccube/Tests/Form/Type/Admin/OrderTypeTest.php @@ -162,4 +162,11 @@ public function testInValidChargeHasMinus() $this->form->submit($this->formData); $this->assertFalse($this->form->isValid()); } + + public function testInvalidPhoneNumberTooLong() { + $this->formData['phone_number'] = '0123456789012345'; + + $this->form->submit($this->formData); + $this->assertFalse($this->form['phone_number']->isValid()); + } }