寻找一种直接向我的所有表单字段动态添加约束的方法。到目前为止,我已经想到了使用form type extension,其中类有效:我可以修改表单 view 然后手动检查视图表格提交。
但是,是否有更智能的方法可以实时添加基于Symfony的实际约束?
(请注意,当表单根据数据库中的用户配置加载时,需要将约束实时添加到表单中。预定义的表单组等不起作用。)
答案 0 :(得分:1)
我建议使用表单事件。
使用PRE_SUBMIT事件在验证前编辑表单。
使用$event->getForm()->add(...)
添加约束来重新创建字段。
当然,您可以使用添加侦听器的FormExtension自动将侦听器添加到所有表单。
中的一些示例您的扩展程序应如下所示:
class ExtensibleExtension extends AbstractTypeExtension
{
private $extensibleSubscriber;
public function __construct($extensibleSubscriber) {
$this->extensibleSubscriber = $extensibleSubscriber;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Only apply on base form
if($builder->getForm()->isRoot())
{
$builder->addEventSubscriber($this->extensibleSubscriber);
}
}
public function getExtendedType()
{
return FormType::class;
}
}
你的EventListener / EventSubscriber应该迭代所有的孩子:
foreach($event->getForm()->all() as $child){
$childName = $child->getName();
$type = get_class($child->getConfig()->getType()->getInnerType());
$options = $child->getConfig()->getOptions();
$options['constraints'] = array(/* ... */);
$form->add($childName,$type,$options);
}