Как отключить обязательное поле в форме Symfony? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть тип формы адреса, который требует почтовый индекс. вот коды

class AddressType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('poBox', TextType::class, ['required' => false])
            ->add('roomNumber', TextType::class, ['required' => false])
            ->add('building', TextType::class, ['required' => false])
            ->add('street', TextType::class, ['required' => false])
            ->add('street2', TextType::class, ['required' => false])
            ->add('country', null, [
                "invalid_message" => "Country is required."
            ])
            ->add('state', null, [
                "invalid_message" => "State is required."
            ])
            ->add('city', null, [
                "invalid_message" => "City is required."
            ])
            ->add('zipCode', TextType::class, [
                "invalid_message" => "Postal Code given is not a valid value.",
                "required" => true,
                "constraints" => [
                    new NotBlank(["message" => "Postal Code is required"]),
                    new Length(["min" => 5, "max" => 5, "exactMessage" => "Postal Code must be a 5-digit code" ]),
                    new Regex(["pattern" => "/^[0-9]+$/", "message" => "Postal code must be numbers only"])
                ]
            ]);
    }

Как видите, только тот почтовый индекс, который мне нужен. У меня есть другой тип формы, я назвал его Тип персоны. Этот тип формы, я наследую класс AddressType. Но, как вы видите, я отключаю обязательное поле (false).

class PersonType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('firstName')
                ->add('lastName')
                ->add('address', AddressType::class, ['required' => false]);

           $builder->get('address')->setRequired(false);                            
        }
    }

каждый раз, когда я отправляю форму, я всегда получаю ошибку формы postal code is required. Я уже отключил обязательное поле в форме типа человека для AddressType. Я не могу изменить обязательное поле почтового индекса на false, потому что другой тип формы (например, CompanyType) требует почтовый индекс. Есть ли у кого-то такая проблема, как я могу изменить обязательное поле на false?

1 Ответ

0 голосов
/ 31 августа 2018

Вам нужно просто добавить этот код

$builder->get('address')->setRequired(false);
...