将HTML输入添加到Symfony 2表单

时间:2016-06-23 15:42:51

标签: php html forms symfony twig

我正在使用Symfony2创建自定义表单。我使用Symfony创建了表单的“第一部分”,如下面的代码:

class TelemedidaMecanicaLecturaType extends AbstractType{
    
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('fecha')
                ->add('valor')
        ;
    }
}

然后,在Twig模板中,我需要添加三个额外的字段:提交按钮和两个隐藏的输入,我需要获取一些重要信息。 我试着这样做:

<form method="post" id="FormLec{{um.id}}">
            {{ form_widget(formLecArr[um.um]) }}
            <input type="hidden" name="um" value="{{um.id}}"/>
            <input type="hidden" name="telemedidaMecanica" value="{{telemedidaMecanica.id}}"/>
            <input type="submit" value="Crear"/>
        </form>

但是当我发送表单,并尝试从控制器获取数据时,我只获得“fecha”和“valor”值。这很奇怪,因为缺少的字段显示在HTML文本中(使用chrome中的inspect code utility),并且提交按钮正常工作。 “嗯”和“telemedidaMecanica”的价值在哪里? 我做错了什么?

谢谢! 艾萨克。

1 个答案:

答案 0 :(得分:1)

您需要做的是在创建表单时将所有表单字段传递给FormType。提交按钮仅发布从Formbuilder生成的值。

您可以这样做:

class TelemedidaMecanicaLecturaType extends AbstractType{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('fecha')
                ->add('valor')
                ->add('um','hidden')
                ->add('telemedidaMecanica','hidden')
        ;
    }
}

或者,如果您无法在实体本身访问这些变量,则可以在从Controller本身实例化FormBuilder时传递值。

控制器中的这样的东西会起作用:

$form = $this->createForm(new TelemedidaMecanicaLecturaType($um, $telemedidaMecanica);

然后在您的FormBuilder中,您可以利用表单的data属性。这样做:

class TelemedidaMecanicaLecturaType extends AbstractType{

    private $um;
    private $telemedidaMecanica;

    public function __construct($um, $telemedidaMecanica)
    {
        $this->um= $um;
        $this->telemedidaMecanica= $telemedidaMecanica;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('fecha')
                ->add('valor')
                ->add('um','hidden', array('data' => $this->um, 'mapped' => false))
                ->add('telemedidaMecanica','hidden', array('data' => $this->telemedidaMecanica, 'mapped' => false))
        ;
    }
}

当您单击“提交”时,也会发布隐藏的值。