forms – 表单选择类型字段symfony的实体中的字段数组类型

我想在我的系统后端为创建用户创建一个UserForm.
我使用一个带有’role’字段的实体作为类型数组
我想使用选择字段类型Form与该实体字段.
我使用变换器类系统在实体和表单之间转换数据.

但我转过头来,没有任何正常运行.

当我使用选项类型的选项’multiple’时,我的字段显示正确,但我不想显示并为该字段选择多个值.

我有通知:未定义的偏移量:0错误
要么
我有ContextErrorException:注意:数组到字符串转换

这几个基本代码:

UserForm类

    $builder->add($builder->create('roles', 'choice', array(
    'label' => 'I am:',
    'mapped' => true,
    'expanded' => false,
    'multiple' => false,
    'choices' => array(
        'ROLE_NORMAL' => 'Standard',
        'ROLE_VIP' => 'VIP',
    )
))->addModelTransformer($transformer));

变压器类

class StringToArrayTransformer implements DataTransformerInterface
{
    public function transform($array)
    {
        return $array[0];
    }

    public function reverseTransform($string)
    {
        return array($string);
    }
}

控制器方法

$user = new User(); //init entity
$form = $this->createForm(new UserForm(), $user);

$form->handleRequest($request);

if ($form->isValid())
{
    $em = $this->getDoctrine()->getManager();
    $em->persist($form);
    $em->flush();
    return $this->redirect($this->generateUrl('task_success'));
}

实体部分

/**
 * @ORM\Column(name="roles", type="array")
 */
protected $roles;

public function getRoles()
{
    return $this->roles;
}
public function setRoles(array $roles)
{
    $this->roles = $roles;
    return $this;
}

我的字段角色实体必须是一个正确运行安全组件Symfony的数组

你能帮助我理解为什么这个字段形式拒绝显示?

我已经在同一个问题上引用了其他问题,但有些事情我不明白,因为没有什么能帮助我解决我的问题.

如果你可以帮我解决我的特殊背景……

感谢支持

最佳答案

because security symfony component integration

如果由于要实现的接口而只需要“getRoles”方法,则执行以下操作会更简单(也更简洁):

>再次将实体字段更改为具有类型字符串的角色
>将getter和setter重命名为getRole()和setRole()
>并添加如下的getRoles方法:

public function getRoles()
{
    return array($this->role);
}

>在表单类型中,将字段名称更改为“role”和“multiple”=>假
>拆除模型变压器

这应该是解决方案;)

转载注明原文:forms – 表单选择类型字段symfony的实体中的字段数组类型 - 代码日志