我有一个“选择”类型的表单窗口小部件,它显示为许多复选框的列表。一切都很好。所以要强调它:有一个小部件,有多个复选框(而不是几个复选框小部件)。
现在,我想禁用其中一些复选框。这些数据可以在$ options-Array中找到。
这是我的FooType.php
的buildForm()函数...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('foo', 'choice', array('choices' => $options['choiceArray']['id'],
'multiple' => true,
'expanded' => true,
'disabled' => $options['choiceArray']['disabled'] // does not work (needs a boolean)
'data' => $options['choiceArray']['checked'], // works
'attr' => array('class' => 'checkbox')))
;
}
...
My Twig-template看起来像这样:
{% for foo in fooForm %}
<dd>{{ form_widget(foo) }}</dd>
{% endfor %}
我只能禁用所有复选框(通过在buildForm中设置'disabled'=&gt; true)。并且传递数组不起作用(在代码片段中注释)。
如何禁用我选择的小部件中的某些选中的复选框(存储在$ options ['choiceArray'] ['disabled']中)?
答案 0 :(得分:1)
我已经使用JQuery解决了这个问题。
这是PHP代码(FooType.php):
...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$disabledCount = sizeof($options['choiceArray']['disabled']);
$disabledString = '';
for ($i = 0; $i < $disabledCount; $i++)
{
$disabledString .= $options['choiceArray']['disabled'][$i];
if ($i < $disabledCount-1)
{
$disabledString .= '|';
}
}
$builder
->add('foo', 'choice', array('choices' => $options['choiceArray']['id'],
'multiple' => true,
'expanded' => true,
'data' => $options['choiceArray']['checked'],
'attr' => array('class' => 'checkbox')))
->add('foo_disabled', 'hidden', array('data' => $disabledString))
;
}
...
这是JavaScript部分(Twig-template):
function disableModule()
{
var disabledString = $('#foo_disabled').val();
var disabledArray = disabledString.split('|');
$.each( disabledArray, function( disKey, disVal )
{
// deactivate checkboxes
$('input[id="'+idCurrent+'"]').attr("disabled", true);
// grey out label for checkboxes
$('label[for="'+idCurrent+'"]').attr("style", "color: gray;");
});
}
在我的Entity / Foo.php中,我不得不使用setter和getter方法添加string类型的属性“foo_disabled”。