我正在使用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模板中,我需要添加三个额外的字段: submit按钮和两个隐藏的输入,我需要这些输入来获取一些重要的信息。我试过这样做:
<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中的检查代码实用程序),而submit按钮工作正常。"um“和"telemedidaMecanica”值在哪里?我做错什么了?
谢谢!艾萨克。
发布于 2016-06-23 16:50:01
您需要做的是在创建表单时将所有表单字段传递给FormType。submit按钮只发布从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中,您可以利用表单的数据属性。这样做:
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))
        ;
    }
}当您单击Submit时,这也会发布隐藏值。
https://stackoverflow.com/questions/37996196
复制相似问题