【问题标题】:Symfony form DateType validationSymfony 表单 DateType 验证
【发布时间】:2017-02-21 08:56:11
【问题描述】:

我有这个日期类型:

$builder
    ->add('date', DateType::class, array(
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        "required"=>true,
        'label' => "jour.date"))

提交日期为空的表单时,没有任何问题。顺利通过了

if ($form->isValid())

在控制器中,最后弹出一个错误

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'date' cannot be null

查询失败,因为它不能为空。但我希望它返回错误,而不是在日期为空时验证表单!

根据要求,实体:

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date", type="datetime")
 */
private $date;

先谢谢了。

【问题讨论】:

  • 你能告诉我们你的实体代码吗?
  • 您确定它正在通过 isValid 且没有日期吗?我将您的代码复制到 FormBuilder 的新实例中并执行 submit([]) 后跟 isValid() 返回 false。
  • @mickadoo 您应该将此作为答案发布。不是submitting 表单是一个很好的错误,很容易被绊倒
  • 嗨@Joshua,我肯定会发布它 - 总是很高兴得到我的代表:-) 但我想先检查它是否是正确的答案,因为即使你没有提交我认为 isValid 默认返回 false。
  • 大家好,谢谢。它正在通过isValid,是的,因为请求处于条件中。我在实体代码中添加字段

标签: symfony symfony-forms


【解决方案1】:

来自symfony docs 上所需的选项

这是肤浅的,独立于验证。充其量,如果你 让 Symfony 猜测你的字段类型,然后这个选项的值将 从您的验证信息中猜测出来。

当您调用表单有效时,它依赖验证器服务和实体验证映射来验证您的实体。

你需要这个 constraint 来设置它

【讨论】:

    【解决方案2】:

    你必须改变:

    $builder
    ->add('date', DateType::class, array(
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        "required"=>true,
        'label' => "jour.date"))
    

    收件人:

    $builder
    ->add('date', DateTimeType::class, array(
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        "required"=>true,
        'label' => "jour.date"))
    

    【讨论】:

    • 您好,感谢您的回答,但没有成功。它仍然通过验证没有任何问题。类型更准确,所以我还是会保留它
    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多