【发布时间】:2013-08-18 13:33:09
【问题描述】:
我有一个“选择”类型的表单小部件,它显示为许多复选框的列表。一切都很好。所以强调一下:有一个小部件,带有许多复选框(而不是几个复选框小部件)。
现在,我想禁用其中一些复选框。该数据在 $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')))
;
}
...
我的 Twig 模板如下所示:
{% for foo in fooForm %}
<dd>{{ form_widget(foo) }}</dd>
{% endfor %}
我只能禁用所有复选框(通过在 buildForm 中设置 'disabled' => true)。并且在那里传递一个数组不起作用(如 sn-p 中所述)。
如何禁用我的选择小部件的某些选中的复选框(存储在 $options['choiceArray']['disabled'] 中)?
【问题讨论】:
-
Symfony EventSubscriber 可以帮助你stackoverflow.com/questions/12642473/…
-
@Milos:感谢您的有益评论!使用 EventSubscriber 似乎是解决方案,但是......实现起来非常复杂。由于我是 Symfony2 新手,我非常感谢一些帮助。在此先感谢您提供任何进一步的提示和 sn-ps! Symfony2 Dynamic Forms
-
仅当您想根据对象中的当前值确定要禁用哪些选项时,EventSubscriber 才相关。它不会帮助您设置单个选项元素的属性。这是一个常见的要求,没有简单的解决方案。您需要创建表单选择对象或提供您自己的树枝模板。这两种解决方案都不容易,我也不知道有什么好的例子。 JavaScript 可能是你最好的选择。
-
@Cerad:谢谢!并且:是的,我采用了 JavaScript 方式......并详细发布了我的解决方案。
-
This related thread 实际上准确地显示了我的问题并解决了它......但是:它不再适用于 Symfony 2.3!
标签: symfony symfony-forms symfony-2.3