表单选择类型字段symfony中的字段数组类型

时间:2014-03-11 18:01:46

标签: forms symfony doctrine-orm

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

但我转过头来,没有正常运行。

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

我有Notice: Undefined offset: 0错误 要么 我有ContextErrorException: Notice: Array to string conversion

这里有一些基本代码:

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

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

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

如果你可以帮我解决我的特定背景......

感谢支持

1 个答案:

答案 0 :(得分:3)

  

因为安全性symfony组件集成

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

  • 将实体字段再次更改为role类型string
  • 将您的getter和setter重命名为 getRole()和setRole()
  • 并添加 getRoles 方法,如下所示:

    public function getRoles()
    {
        return array($this->role);
    }
    
  • 在表单类型中,将字段名称更改为“role”'multiple' => false

  • 移除模型转换器

这应该是解决方案;)