lop*_*ded 2 forms validation symfony silex
我确定这必须是一个RTM问题,但我必须在错误的地方寻找.在symfony 1.4中,我使用了post validator回调函数.例如,检查开始日期和结束日期的顺序是否正确.我正在开发Silex中的应用程序,但无法弄清楚如何添加类似的功能作为验证器.这就是我正在使用的(基本上):
$app['form.example'] = function ($app) {
$constraints = new Assert\Collection(array(
'date1' => new Assert\Date(),
'date2' => new Assert\Date(),
));
$builder = $app['form.factory']->createNamedBuilder('form', 'example', array(), array('validation_constraint' => $constraints));
return $builder
->add('date1', 'date')
->add('date2', 'date')
->getForm();
};
Run Code Online (Sandbox Code Playgroud)
我可以将自己的验证测试放在'过程表单'部分,例如:if ($form->isValid() && --my datetest--)但它对我来说不合适.
有帮助吗?谢谢!
我想你可以使用表格事件来做这种事情; 当然对于Symfony2,所以我也假设Silex?有一篇关于使用它来生成动态表单的食谱文章:
http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html
另一个SO问题中的一些有用的细节:
本来可以发誓我和某人讨论过这件事,但是我找不到问题.我曾使用BIND_CLIENT_DATA计算某些代码中的某些表单字段; 我会看看能否把它挖出来.
编辑
好吧,我发现了一些东西,但我正在修改Symfony代码,所以我不是百分之百,但它可能是一个起点(我希望):
$builder->addEventListener(FormEvents::BIND_NORM_DATA, function($event) {
// your form data
$data = $event->getData();
// get date objects - if you cannot dereference this way try getters
$d1 = $data['date1'];
$d2 = $data['date2'];
// naive comparison :)
$isCorrectDateOrder = $d1->getTimestamp() < $d2->getTimestamp();
// check the comparison
if (!$isCorrectDateOrder) {
// trouble... create and add a FormError object to the form
$event->getForm()->get('date1')->addError(new \Symfony\Component\Form\FormError('uh oh...'));
}
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)