Symfony 4 - Form返回null错误

时间:2018-01-05 14:57:40

标签: php forms symfony symfony4

我目前正在处理表单,但我收到此错误:

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;

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

2 个答案:

答案 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