我目前正在处理表单,但我收到此错误:
Type error: Return value of App\Entity\Customer::getGender() must be of the type string, null returned
这是我的代码:
表单的简短版本(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);
}
客户实体:
/**
* @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;
非常感谢你的时间和帮助。
答案 0 :(得分:1)
$gender
应始终返回字符串,在您的情况下,它返回null
可为空=假
向您的实体添加验证 - 详细了解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;
但是,我可以看到你有一个名为$ gender的字段 - 所以最好像这样使用choice验证:
/**
* @var string
*
* @ORM\Column(name="gender", type="string", length=4, nullable=false)
* @Assert\Choice({"male", "female"})
*/
private $gender;
答案 1 :(得分:0)
感谢Jared Farrish的评论,这个解决方案对我有用:
Base
上的getter需要有一个可以为空的回报:
$gender