实体类型字段中的 1:N 原则关系的选定空值


Selected null-value for 1:N Doctrine relation in EntityType-field

我遇到了与风险相关的事件。

我正在使用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时,我的单选按钮列表没有选择任何值。无论 'required' -选项的值如何,都会发生这种情况。

对于空值,我得到:

( ) not assessed
( ) none
( ) very low
[...]

我想要:

(x) not assessed
( ) none
( ) very low
[...]

我想这种行为对于(未展开的)下拉字段来说很好。

有没有办法在null数据值时选择我的单选按钮的'placeholder'/'empty_value'选项?

对于您的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

有效但不是一个好的解决方案......如果您的第一个值是动态的,会发生什么情况?