2016-09-01 64 views
1

使用选择类型的Symfony framwork的,我们可以决定去显示列表,单选按钮或复选框与两个键玩:布尔值和选择的symfony型

'multiple' => false, 
'expanded' => true, //example for radio buttons 

比方说,而不是字符串的值作为一个阵列中的“选择”键给出的不同的选择都是布尔型:

$builder->add('myproperty', 'choice', array(
    'choices' => array(
     'Yes' => true, 
     'No' => false 
    ), 
    'label' => 'My Property', 
    'required' => true, 
    'empty_value' => false, 
    'choices_as_values' => true 
)); 

使用列表(选择)以显示目前存在的选择是没有问题的,并且当形式被显示在正确的选择列表中的被选中。

如果我添加了两个键(多和展开),我谈到之前更换由单选按钮列表,对我的领域没有选择按钮(尽管它与选择的工作)。

有人知道这是为什么?

如何轻松地工作?

谢谢

注:实际上我认为它不会与任何然后就像值是布尔值,并最终成为字符串但它的作品的名单,我不知道为什么它不工作其他。

+0

我想'empty_value'不与单选按钮的工作。相反,您可以使用'数据'选项强制该值。 '阵列( '必要'=>真, '数据'=>假, 'choices_as_values'=>真)' – VaN

+0

empty_value无线电按钮工作时值不布尔值。我想一个解决方案可以为实体创建一个变换器,但是通过框架没有更简单的方法 – mlwacosmos

回答

4

我会给我的回答,希望它会帮助别人。


我添加了一个数据转换器;

$builder->add('myproperty', 'choice', array(
    'choices' => [ 
     'Yes' => '1', 
     'No' => '0' 
    ), 
    'label' => 'My Property', 
    'required' => true, 
    'empty_value' => false, 
    'choices_as_values' => true 
)); 

$builder->get('myProperty') 
    ->addModelTransformer(new CallbackTransformer(
     function ($property) { 
      return (string) $property; 
     }, 
     function ($property) { 
      return (bool) $property; 
     } 
)); 

这是神奇的:现在我有正确的单选按钮检查和正确的值在实体中。