我想在系统后端为创建用户创建一个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
你能帮我理解为什么这个字段形式拒绝显示?
我已经在同一个问题上引用了其他问题,但有些事我不明白,因为没有什么能帮助我解决我的问题。
如果你可以帮我解决我的特定背景......
感谢支持
答案 0 :(得分:3)
因为安全性symfony组件集成
如果由于您正在实现的接口而只需要“getRoles”方法,则执行以下操作会更简单(也更简洁):
role
类型string
并添加 getRoles 方法,如下所示:
public function getRoles()
{
return array($this->role);
}
在表单类型中,将字段名称更改为“role”和'multiple' => false
这应该是解决方案;)