gpt4 book ai didi

forms - Silex/Symfony2 后验证

转载 作者:行者123 更新时间:2023-12-01 15:25:12 25 4
gpt4 key购买 nike

我确定这一定是一个 RTM 问题,但我一定是找错了地方。在 symfony 1.4 中,我经常使用后验证器回调。例如,检查开始日期和结束日期的顺序是否正确。我正在 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();
};

我可以将自己的验证测试放在“流程表单”部分,例如:if ($form->isValid() && --my datetest--) 但感觉不对我在那里。

有什么帮助吗?谢谢!

最佳答案

我猜你可以为这种事情使用表单事件;当然是 Symfony2,所以我假设 Silex 也是?有一篇关于使用它生成动态表单的食谱文章:

http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html

另一个 SO 问题中的一些有用的细节:

Description of Symfony2 form events?

本可以发誓我之前曾与某人就此进行过 SO 讨论,但我找不到问题。不久前,我使用 BIND_CLIENT_DATA 计算了一些代码中的一些表单字段;我看看能不能把它挖出来。

编辑

好吧,我发现了一些东西,但我正在从 Symfony 代码修改它,所以我不是 100% 对此但它可能是一个起点(我希望):

$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...'));
}
});

希望这有帮助:)

关于forms - Silex/Symfony2 后验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10179893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com