【问题标题】:Symfony2 form - date field validation doesn't workSymfony2 表单 - 日期字段验证不起作用
【发布时间】:2012-05-28 13:32:46
【问题描述】:

当我提交表单时,包含日期的文本字段未经过验证,尽管我在实体中定义了约束。什么是不正确的?我需要为包含日期的文本字段编写自定义日期验证器吗?

在我的表单类中

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
            ->add('added', 'date', array(
                'required' => false,
                'widget' => 'single_text',
                'format' => 'yyyy-MM-dd',
                'attr' => array(
                    'class' => 'datepicker'
                )
            ))
}

在实体中

/**
 * @var date
 *
 * @Assert\Date(message = "test")
 * @ORM\Column(name="added", type="date", nullable=true)
 */
private $added;

在控制器中(我需要列出这些错误)

    $request = $this->getRequest();
    $r = $this->getProfileRepository();
    $profile = $id ? $r->find($id) : new \Alden\XyzBundle\Entity\Profile();
    /* @var $profile \Alden\XyzBundle\Entity\Profile */
    $form = $this->createForm(new ProfileType(), $profile);
    if ($request->getMethod() == 'POST')
    {
        $form->bindRequest($request);
        $errors = $this->get('validator')->validate($profile);
        foreach ($errors as $e)
        {
            /* @var $e \Symfony\Component\Validator\ConstraintViolation */
            $errors2[$e->getPropertyPath()] = $e->getMessage();
        }
        if (count($errors2))
        {
        ...
        } else {
            $em = $this->getEntityManager();
            $em->persist($profile);
            $em->flush();
        }

【问题讨论】:

  • 当评估分配给$errors 时,$errors2 来自哪里。是不是打错字了?
  • 我没有复制所有代码,显然删减了太多。我添加了缺失的行。
  • 还有什么遗漏吗?您将 $request 绑定到 $form,然后验证 $profile。大概你正在某处做类似 $profile->setAdded($form->getData()->getAdded()) 的事情?
  • 不,我没有——一切都由 Sf2 表单组件处理。我向控制器添加了更多代码。

标签: forms symfony


【解决方案1】:

您可能需要更新配置。根据 Symfony2 书的Validation 部分:

默认情况下启用 Symfony2 验证器,但如果您使用注释方法指定约束,则必须显式启用注释:

例如:

# app/config/config.yml
framework:
    validation: { enable_annotations: true }

【讨论】:

  • 还有其他字段(如 firstName)被验证正确(非空且最小长度 = 3)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多