Symfony 4 - 表单 returns 空错误
Symfony 4 - Form returns null error
我目前正在处理一个表单,但我收到了这个错误:
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';
}
客户控制器:
$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;
非常感谢您的宝贵时间和帮助。
$gender
应该总是 return 字符串,在你的情况下,它 returns null
nullable=false
为您的实体添加验证 - 详细了解 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;
感谢 Jared Farrish 的评论,这个解决方案对我有用:
$gender
上的 getter 需要有一个可为 null 的 return:
public function getGender(): ?string
我目前正在处理一个表单,但我收到了这个错误:
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';
}
客户控制器:
$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;
非常感谢您的宝贵时间和帮助。
$gender
应该总是 return 字符串,在你的情况下,它 returns null
nullable=false
为您的实体添加验证 - 详细了解 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;
感谢 Jared Farrish 的评论,这个解决方案对我有用:
$gender
上的 getter 需要有一个可为 null 的 return:
public function getGender(): ?string