我正在使用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”的价值在哪里? 我做错了什么?
谢谢! 艾萨克。
答案 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))
;
}
}
当您单击“提交”时,也会发布隐藏的值。