Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 出错后如何向Symfony表单添加表单元素_Php_Forms_Symfony - Fatal编程技术网

Php 出错后如何向Symfony表单添加表单元素

Php 出错后如何向Symfony表单添加表单元素,php,forms,symfony,Php,Forms,Symfony,我有一张symfony2表格 我想做的是,如果有错误,在表单中添加一个captcha字段,因此第二次也需要填写。验证码在这里不是重要的问题,但提交后如何添加该字段,如果提交后无法更改发件人,我如何知道该字段已提交 因此,主要的问题是,如果出现错误,如何添加文本输入字段?尝试以下方法: public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('f

我有一张symfony2表格

我想做的是,如果有错误,在表单中添加一个captcha字段,因此第二次也需要填写。验证码在这里不是重要的问题,但提交后如何添加该字段,如果提交后无法更改发件人,我如何知道该字段已提交

因此,主要的问题是,如果出现错误,如何添加文本输入字段?

尝试以下方法:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('foo', 'number')
        ->add('bar', 'number')
        ->add('submit', 'submit')
    ;

    $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
}

public function onPreSubmit(FormEvent $event)
{
    if (!$event->getForm()->isValid()) {
        $event->getForm()->add('test', 'text', [
            'mapped' => false
        ]);
    }

}

使用表单事件在提交后添加字段:谢谢,但正如我所写的,我只在第一个错误之后才需要它。如果我只使用事件,那么在第一次调用时If就会出现。表单在每次提交时都会完全重建。如果没有错误,则处理数据并重定向。如果出现错误,请添加captcha字段并再次显示表单。您可能需要设置一个标志,以便表单模板仅尝试显示验证码字段(如果存在)。你可能会让这变得更难。好吧,这不起作用:)因为提交后表单是不可编辑的:)所以答案并不像你建议的那么简单。是的,我花了将近半天的时间,我对symfony并不陌生。