Dario
Dario

Reputation: 640

Symfony 4 - Form returns null error

I'm currently working on a form and I get this error:

Type error: Return value of App\Entity\Customer::getGender() must be of the type string, null returned

Here is my code:

Short Version of the Form (CustomerFormType):

$builder
    ->add('gender', ChoiceType::class, [
        'choices' => [
            'Herr' => 'Herr',
            'Frau' => 'Frau'
        ],
        'label' => 'Anrede:',
        'expanded' => true,
        'multiple' => false
    ])

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

public function getBlockPrefix() {
    return 'app_bundle_customer_form_type';
}

CustomerController:

$form = $this->createForm(CustomerFormType::class);

$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
    $customer = $form->getData();
    dump($customer);
}

Customer Entity:

/**
 * @ORM\Entity
 */
class Customer
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="gender", type="string", length=4, nullable=false)
     */
    private $gender;

Thank you very much for your time and help.

Upvotes: 1

Views: 2063

Answers (2)

Dario
Dario

Reputation: 640

Thanks to Jared Farrish in the comments, this solution works for me:

The getter on $gender needs to have a nullable return:

public function getGender(): ?string

Upvotes: 0

Petro Popelyshko
Petro Popelyshko

Reputation: 1379

$gender should always return string, in your case, it returns null

nullable=false

Add validation to your entity - read more about Assert\NotNull

    use Symfony\Component\Validator\Constraints as Assert;
    /**
     * @ORM\Entity
     */
    class Customer
    {
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;

        /**
         * @var string
         *
         * @ORM\Column(name="gender", type="string", length=4, nullable=false)
         * @Assert\NotNull()
         */
        private $gender;

But, as I can see you have a field named $gender - so it is better to use choice validation like this one:

    /**
     * @var string
     *
     * @ORM\Column(name="gender", type="string", length=4, nullable=false)
     * @Assert\Choice({"male", "female"})
     */
    private $gender;

Upvotes: 1

Related Questions