属性路径中给出的预期参数类型为“string”、“null”

问题描述 投票:0回答:3

实际上,当我尝试通过发送空字段来编辑表单时,会出现上述错误,

我的 UserType 类看起来像:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', null, [
                'label' => 'Prénom'
            ])
            ->add('lastName', null, [
                'label' => 'Nom'
            ])
            ->add('email', EmailType::class, [
                'label' => 'Adresse e-mail'
            ])
            ->add('password', PasswordType::class, [
                'label' => 'Mot de passe'
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}
symfony symfony4 symfony-forms
3个回答
26
投票

这个问题可以通过在builder添加函数中添加'empty_data'参数来解决:

因此新的 UserType 类变为:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', null, [
                'label' => 'Prénom',
                **'empty_data' => ''**
            ])
            ->add('lastName', null, [
                'label' => 'Nom',
                **'empty_data' => ''**
            ])
            ->add('email', EmailType::class, [
                'label' => 'Adresse e-mail',
                **'empty_data' => ''**
            ])
            ->add('password', PasswordType::class, [
                'label' => 'Mot de passe',
                **'empty_data' => ''**
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

4
投票

您可以将字段设置为接受

null
值,而不是@Mustapha GHLISSI答案:

<?php
    
class User 
{
       public ?string $firstName;

       // your other fields
}

public ?string $firstName
将接受字段
firstName
的字符串和空值。

PHP 8.0 之前可能是:

public function setFirstName(string $firstName = null): self
{
   $this->firstName = $firstName;
   return $this;
}

0
投票

如果您不喜欢数据库中出现的 NULL,那么您有 2 个选择

  1. 通过 setter 将 NULL 转换为空字符串
class User 
{
    public string $firstName;

    public function setFirstName(?string $firstName): self
    {
        if ($firstName === null) {
            $firstName = '';
        }

       $this->firstName = $firstName;

       return $this;
    }
}
  1. 在字段定义期间使用
    empty_data
    选项。我不知道为什么 Mustapha 在他的答案中使用
    empty_data
    选项前后的星星。
class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('firstName', TextType::class, [
                'label'      => 'Prénom',
                'required'   => false,
                'empty_data' => '',
            ])
            ->add('lastName', null, [
                'label'      => 'Nom',
                'required'   => false,
                'empty_data' => ''
            ])
        ;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.