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