寻找一种简单的方法来动态添加约束到我的所有表单字段。到目前为止,我想到了使用表单类型扩展的想法,这种方法很有效:我可以修改表单视图,然后手动检查表单提交时的视图。
然而,是否有更智能的方法来实时添加真正的基于 Symfony 的约束?
(请注意,当表单根据数据库中的用户配置加载时,需要将约束实时添加到表单中。预定义的表单组等将不起作用。)
我建议使用表单事件。
使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
并且您的 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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3837 次 |
最近记录: |