【问题标题】:Add a HTML input to a Symfony 2 form向 Symfony 2 表单添加 HTML 输入
【发布时间】:2016-06-23 15:42:50
【问题描述】:

我正在使用 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 中的检查代码实用程序)并且提交按钮正常工作。 “嗯”和“telemedidaMecanica”值在哪里? 我做错了什么?

谢谢! 艾萨克。

【问题讨论】:

  • 您需要将所有表单字段添加到 FormType 中,否则它们会被忽略。您是否有理由无法在 Type 中获取这些值并将它们设置为那里的默认值。如果没有,您可以将它们放在模板中的其他位置,并在加载后使用 jQuery 或其他方式设置它们,但这有点倒退。

标签: php html forms symfony twig


【解决方案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')
        ;
    }
}

或者,如果您在 Entity 本身中无权访问这些变量,则可以在从 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))
        ;
    }
}

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

【讨论】:

  • 如果这些字段不是实体的一部分,请不要忘记为这些字段添加 'mapped' => false
  • 我不知道我怎么会忘记包括在内。谢谢@Stmm
  • 谢谢 :) 向 FormType 添加字段已解决!
猜你喜欢
  • 1970-01-01
  • 2012-09-07
  • 2011-08-28
  • 2011-07-11
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多