【发布时间】: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 表单组件处理。我向控制器添加了更多代码。