gpt4 book ai didi

symfony - 使用 allowExtraFields=true 验证 Symfony 2 中的集合字段类型

转载 作者:行者123 更新时间:2023-12-04 08:49:37 25 4
gpt4 key购买 nike

我正在尝试验证一个集合表单域:

$builder->add(
'autor',
'collection',
array(
'type' => 'text',
'options' => array('required' => false),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'error_bubbling' => false
)
);

我使用 JavaScript,正如 Cookbook 中所建议的那样,动态地向集合中添加更多文本字段。我的问题是,我不知道如何验证这些字段。集合验证器让我可以通过名称验证集合的特定字段,而不仅仅是它的每个字段。我该如何管理?

如果我可以检查,如果至少其中一个字段是 notBlank 而不是强制它到每个字段,那就更酷了。

最好的问候

最佳答案

您可以使用在所有字段都可用的表单字段类型中定义的“约束”选项。( http://symfony.com/doc/master/reference/forms/types/form.html#constraints )。在您的情况下,您可以像这样添加约束:

$builder->add('autor', 'collection', array(
'constraints' => new NotBlank()),
));

(在这种情况下,不要忘记包含验证组件提供的约束:使用 Symfony\Component\Validator\Constraints\NotBlank; ...)

我没有测试,但我认为每个输入都将根据您分配给该字段的约束进行验证,并且由于您将选项“error_bubbling”设置为 false,因此错误消息应附加到无效元素。

--编辑--

因为你甚至使用 2.0 版本的 Symfony,我认为这个解决方案可以解决你的问题,但是我强烈建议你更新到 2.3 版本。

您可以创建一个表单事件订阅者(http://symfony.com/doc/2.0/cookbook/form/dynamic_form_modification.html),它将监听 POST_BIND 事件。(请注意,Post Bind 事件自 2.3 版起已弃用,并将在 3.0 中删除);

在您的订阅者类中,您将根据需要验证每个提交的作者,并在出现错误时向表单添加错误。

您的 postBind 方法可能是这样的:

public function postBind(DataEvent $event)
{
$data = $event->getData();

$form = $event->getForm();

if (null === $data) {
return;
}

// get the submited values for author
// author is an array
$author = $form['autor']->getData();

// now iterate over the authors and validate what you want
// if you find any error, you can add a error to the form like this:
$form->addError(new FormError('your error message'));

// now as the form have errors it wont pass on the isValid() method
// on your controller. However i think this error wont appear
// next to your invalid author input but as a form error, but with
// this you can unsure that non of the fields will be blank for example.

}

如果您对核心方法有任何疑问,可以查看 Symfony2 Form Component API。 http://api.symfony.com/2.0/index.html

关于symfony - 使用 allowExtraFields=true 验证 Symfony 2 中的集合字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936437/

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