如果在symfony中的表单类型中选中了复选框,请添加输入标记

时间:2016-09-07 10:35:52

标签: php forms symfony

我是一名新的symfony用户。我正在使用表单类型生成表单。我已生成一组复选框,如果选中了其中一​​个复选框,则希望显示输入字段。

所以我正在向我的表单构建器添加一个像这样的营销规则

  ->add('marketingRules', 'entity', array(
                'required' =>'true',
                'class' => 'RecomendationsBundle:MarketingRule',
                'choices' => $builder->getData()->getProject()->getPlan()->getMarketingRules(),
                'property' => 'name',
                'expanded' => true,
                'multiple' => true,
                'by_reference' => false,
            ))

这可以按预期工作。但是,当我选择其中一个营销规则时,我想添加一个输入字段,以便能够为所选的营销规则添加参数。

我可以通过使用JavaScript检查表单并添加必要的输入来手动执行此操作,但我确信必须有更好的选择。

如果我能让我的案子更清楚,请告诉我。在我脑海中听起来不错:(

使用: Symfony 2.5(旧项目)

非常感谢您的时间:)

1 个答案:

答案 0 :(得分:1)

在表单中创建基本复选框,您可以使用当前方法:

use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
// ...

$builder->add('public', CheckboxType::class, array(
    'label'    => 'Show this entry publicly?',
    'required' => false,
));

在此之后,您可以添加""参数选项" - >像另一个添加,如果选中"。 该复选框使用类似值true和false。但我还没有使用这些。

更好的解决方案留在Jquery或者你也可以使用css。我解释说:

对于使用的CSS: 在视图中添加如下输入:

<input class="reveal-if-active" name="TheNameYouWant" type="TheTypeYouNeed"/>

和css:

.reveal-if-active {
  opacity: 0;
  max-height: 0;
  overflow: hidden;
}
input[type="radio"]:checked ~ .reveal-if-active,
input[type="checkbox"]:checked ~ .reveal-if-active {
  opacity: 1;
  max-height: 100px; /* little bit of a magic number :( */
  overflow: visible;
}

对于您的控制器,您可以手动处理请求:

$myvar = $request->request->get('TheNameYouWant');

在if($表格有效)中你添加它,然后坚持:

$myObject->setValueNeeded($myvar);

如果您不需要选项字段,这是使用复选框的好方法。

最好的方式是使用Jquery,对于这个我已经看到你已经使用它所以没有必要告诉你这是怎么做的。

我不确定您是否有Symfony的解决方案,除了可以使用css方法的解决方案我已经给你(对于控制器和css保持相同的方法,只需使用此特殊参数的额外字段:

->add('extra', null, array('mapped' => false)),

如果您不打电话,这将使您的视野在观看时不可见。 (对于这个我引用这篇文章 - &gt; https://stackoverflow.com/a/12766325/6795425