symfonysymfony4symfony-forms

Expected argument of type "string", "null" given at property path


Actually when I try to edit the form by sending empty fields, the above error comes on ,

My UserType class looks like:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', null, [
                'label' => 'Prénom'
            ])
            ->add('lastName', null, [
                'label' => 'Nom'
            ])
            ->add('email', EmailType::class, [
                'label' => 'Adresse e-mail'
            ])
            ->add('password', PasswordType::class, [
                'label' => 'Mot de passe'
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

Solution

  • Deprecated Solution: This problem can be resolved by adding 'empty_data' param in the builder add function:

    So the new UserType classe becomes:

    class UserType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('firstName', null, [
                    'label' => 'Prénom',
                    **'empty_data' => ''**
                ])
                ->add('lastName', null, [
                    'label' => 'Nom',
                    **'empty_data' => ''**
                ])
                ->add('email', EmailType::class, [
                    'label' => 'Adresse e-mail',
                    **'empty_data' => ''**
                ])
                ->add('password', PasswordType::class, [
                    'label' => 'Mot de passe',
                    **'empty_data' => ''**
                ])
            ;
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => User::class,
            ]);
        }
    }
    

    Updated Solution: PHP7.4 comes with typed properties which something powerful, so you can simply declare any property and affect NULL as initial value

    Example:

    class User {
         
       private ?string $firstName = null;
    
       public function getFirstName(): ?string {
          return $this->firstName;
       }
       
       public function setFirstName(?string $firstName): self {
          $this->firstName = $firstName;
    
          return $this;
       }
    }