我发现了一些涉及风险的事件。
我使用Symfony 2.6和Doctrine ORM实体与以下相当符号的实体:
class Incident
{
private $id;
private $name;
private $date;
/**
* @ORM\ManyToOne(targetEntity="Risk")
* @ORM\JoinColumn(name="risk_id")
*/
private $risk;
}
class Risk
{
private $id;
private $level;
private $name;
}
risks
- 表的数据如下:
id level name
1 0 none
2 2 low
3 1 very low
4 5 moderate
5 10 high
对于这些事件我得到了这样的表单类型:
class IncidentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
[...]
->add('risk', 'entity', [
'class' => 'Model:Risk',
'property' => 'name',
'empty_data' => null,
'empty_value' => 'not assessed',
'expanded' => true,
'required' => [true|false](see below),
])
[...]
}
因此,我的事件风险可能无法评估'那是没有风险集(= null
)的时候。为了保持我的模型清洁,我不希望有一个级别为-1且名称为“未评估”的行。
我的表单按预期工作,缺少一个小细节:当risk
为null
时,我的radiobuttons列表没有选择值。无论'required'
- 选项的值如何,都会发生这种情况。
对于null值,我得到:
( ) not assessed
( ) none
( ) very low
[...]
我想要:
(x) not assessed
( ) none
( ) very low
[...]
我猜这种行为对于(未扩展的)下拉字段来说很好。
当数据值为'placeholder'
时,是否可以选择我的单选按钮'empty_value'
/ null
- 选项?
答案 0 :(得分:1)
对于您应该执行的risk
字段:
class IncidentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
[...]
->add('risk', 'entity', [
'class' => 'Model:Risk',
'property' => 'name',
'empty_data' => null,
'empty_value' => 'not assessed',
'expanded' => true,
'required' => true
])
[...]
}
}
我刚检查过它并且它有效,当risk
为空并且使用上面的代码时,会选择第一个值。注意我添加了'empty_data' => null, 'empty_value' => 'not assessed',
并删除了placeholder
。
答案 1 :(得分:-1)
有效,但不是一个好的解决方案......如果您的第一个值是动态的,会发生什么?