【问题标题】:Symfony Form Validation EntityTypeSymfony 表单验证实体类型
【发布时间】:2017-06-21 09:05:30
【问题描述】:

对于联系表格,我有两个实体。

class ContactRequest
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    [...]

    /**
     * @ORM\ManyToOne(targetEntity="ContactCategory")
     * @ORM\Column(name="type", type="integer")
     */
    private $type;

    /**
     * @var string
     *
     * @ORM\Column(name="message", type="text", nullable=false)
     */
    private $message;


    [...]


}

class ContactCategory
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    [...]


    public function __toString()
    {
        return $this->getName();
    }
}

然后是我的表格

class ContactRequestType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('requesterFirstname', Type\TextType::class, array('label' => 'Prénom'))
            ->add('requesterLastname', Type\TextType::class, array('label' => 'Nom'))
            ->add('requesterMail', Type\EmailType::class, array('label' => 'Email'))
            ->add('requesterPhone', Type\TextType::class, array('label' => 'Téléphone'))
            ->add('message', Type\TextareaType::class, array('label' => 'Message'))
            $builder->add('type', EntityType::class, [
                'class' => 'CargoApiBundle:ContactCategory',
                'group_by' => 'group',
                'query_builder' => function (EntityRepository $er) use ( $options ) {
                    return $er->createQueryBuilder('cc')
                        ->where('cc.site = :site')->setParameter('site', $options['site'])
                        ->orderBy('cc.group', 'ASC')
                        ->orderBy('cc.name', 'ASC');
                }
            ]);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'short' => false,
            'site' => null,
            'data_class' => 'Cargo\ApiBundle\Entity\ContactRequest'
        ]);
    }
}

显示工作正常,但是当我提交表单时,它会在类型字段“此值应为整数类型”上引发错误。似乎合乎逻辑,因为它必须是我的联系人类别的 id。

于是我查看了表单生成的代码,并没有发现任何错误:

<select id="contact_request_type" name="contact_request[type]" class="form-control">
    <optgroup label="Général">
        <option value="4">Autre</option>
        <option value="3">Du partenariat/sponsoring</option>
        <option value="1">Le fonctionnement de l'association</option>
        <option value="2">Un tournoi internationnal</option>
    </optgroup>
    <optgroup label="Une section">[...]</optgroup>
    <optgroup label="Le site">[...]</optgroup>
</select>

所以我转储了请求内容以查看提交的内容并得到了这个:

array (size=3)
  'action' => string 'contact_send' (length=12)
  'contact_request' => 
    array (size=7)
      'requesterFirstname' => string 'Kiro' (length=5)
      'requesterLastname' => string 'Staz' (length=4)
      'requesterMail' => string 'me@me.com' (length=18)
      'requesterPhone' => string '0000000000' (length=10)
      'type' => string '2' (length=1)
      'message' => string 'test' (length=17)
      '_token' => string '32LuZWWh8h-6lMlEShrjrs1w5HspaX0R4WikcGf5u3o' (length=43)

我的数据是正确的,但 contact_request['type'] 被转储为字符串,我认为问题应该是整数类型,但被验证为整数。

谁能告诉我我做错了什么?

我没有自定义约束验证器。

谢谢!

【问题讨论】:

  • 你的 Symfony 和 PHP 版本是多少?
  • Symfony 3.3.2 和 PHP 7.0.3

标签: php forms symfony doctrine-orm symfony-forms


【解决方案1】:

关联字段不应有任何@Column 注释。 Doctrine 会根据 ContactCategory 主键的类型来判断它应该是什么类型的列。

删除

 * @ORM\Column(name="type", type="integer")

来自ContactRequest::$type

【讨论】:

  • Erf... 它曾经是我的实体的属性,我在关联类别时忘记删除注释。更改后,重新创建数据库并清除缓存,我仍然有错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2016-03-21
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多