Reputation: 640
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
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
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