Doctrine orm 如何设置元素的默认选定值

Doctrine orm 如何设置元素的默认选定值,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我有一个简单的用户注册表,用户可以选择自己的用户类型。用户类型映射到一个角色。这是使用doctrine2模块的zf2应用程序的一部分 我的用户字段集的init()方法的相关部分如下所示: 公共函数init() { //…其他字段定义 $roleRadio = new ObjectRadio('role'); $roleRadio->setLabel('What type of user are you?') ->setOptions(

我有一个简单的用户注册表,用户可以选择自己的用户类型。用户类型映射到一个角色。这是使用doctrine2模块的zf2应用程序的一部分

我的用户字段集的init()方法的相关部分如下所示: 公共函数init() { //…其他字段定义

    $roleRadio = new ObjectRadio('role');
    $roleRadio->setLabel('What type of user are you?')
              ->setOptions(
                    array(
                        'object_manager' => $this->objectManager,
                        'target_class'   => 'MyUser\Entity\Role',
                        'property'       => 'roleId',
                        'is_method'      => true,
                        'find_method'    => array(
                            'name'   => 'findBy',
                            'params' => array(
                                'criteria' => array('userselectable' => true),
                                'orderBy'  => array('displayorder' => 'ASC'),
                            ),
                        ),
                    )
    );

    $this->add($roleRadio);

    // ... more stuff ...
}
我正在为此元素使用Doctrine的ObjectRadio类来自动填充值选项。有没有办法设置默认的选定值? 我知道我可以这样做:

$form->get('user')->get('role')->setValue(3);
但我不想硬编码,我也不想把这种逻辑放在我的控制器中


有什么建议吗?

我不知道你说的“我不想硬编码”是什么意思,但你可以按照你在控制器中说的那样做,也可以在表单定义中通过如下设置属性来做:

$roleRadio->setAttributes(array('value' => 3));

我所说的硬编码指的是默认选项的id。我不希望在角色id更改时它中断,因为它只是一个自动递增列。如果您有角色对象,则可以使用
setValue($roleObject)设置
ObjectRadio
当前值
,您可以将unique role\u code列添加到roles表中,并按其代码选择role…这将删除对IDies的依赖性,我现在就是这样解决的。我为用户模块“default\u role”添加了一个配置选项,该选项引用了唯一的角色名称。在UserService中,我现在有一个getDefaultRole()返回角色实体。我在创建表单时将其分配给表单。感谢您的参与。