首页 文章

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

提问于
浏览
4

我想在我的系统后端为创建用户创建一个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 回答

  • 3

    因为安全性symfony组件集成

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

    • 再次将实体字段更改为 role ,类型为 string

    • 将getter和setter重命名为getRole()和setRole()

    • 并添加如下的getRoles方法:

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

    • 删除模型变压器

    这应该是解决方案;)

相关问题