1

我目前正在处理一个表格,我收到了这个错误:

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;

非常感谢您的时间和帮助。

4

2 回答 2

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 的字段 - 所以最好使用像这样的选择验证:

    /**
     * @var string
     *
     * @ORM\Column(name="gender", type="string", length=4, nullable=false)
     * @Assert\Choice({"male", "female"})
     */
    private $gender;
于 2018-01-05T15:08:26.480 回答
0

感谢评论中的 Jared Farrish,这个解决方案对我有用:

getter on$gender需要有一个可为空的返回值:

public function getGender(): ?string

于 2018-03-02T08:06:37.870 回答