我有两个实体,即User
和Role
具有许多在它们之间一对多的关系。我生成了一个 CRUD,它工作正常,但UserType
表单呈现了一个选择菜单,用于为用户选择角色。因为我需要一个下拉列表中的复选框,所以我对我的UserType
课程进行了更改
最初的
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstName')
->add('lastName')
->add('address')
->add('phone')
->add('nic')
->add('email')
->add('password')
->add('isActive')
->add('roles');
}
更改后
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstName')
->add('lastName')
->add('address')
->add('phone')
->add('nic')
->add('email')
->add('password')
->add('isActive')
->add('roles',EntityType::class, array('class'=>'AppBundle\Entity\Role',
'multiple'=>true,
'expanded'=>true,));
}
这就是一切的开始。我可以毫无问题地创建一个新用户,但是当我尝试编辑时
警告:spl_object_hash() 期望参数 1 是对象,给定的字符串
未呈现编辑表单时出现错误。
我试图解决这个问题
用户实体用于登录我的系统,因此我返回属于用户的角色数组。
public function getRoles()
{
$role_data = $this->roles->toArray();
$roles = array();
foreach($role_data as $key=>$role)
{
$roles[] = $role->getName();
}
return $roles;
}
我将上面的 getter 更改为简单地返回一个对象,如下所示
public function getRoles()
{
return $this->roles;
}
现在用户创建和编辑工作正常,但我的登录被破坏,因为getRoles
不再返回数组
我真正想要的是呈现UserType
带有用于选择角色的复选框的表单,但是当我尝试这样做时发生了这种情况。到目前为止,我试图找到一个没有任何成功的解决方案。
表单实体类型期望对象列表(角色实体)作为其值,但获取字符串列表作为getRoles
方法返回字符串列表。您不能更改getRoles
方法,因为它是安全组件的一部分。您可以将roles
字段重命名为其他名称,并有 2 个方法 getXXX 来获取角色实体列表和安全组件的 getRoles。
前任。:
用户
class User
{
/**
* @ORM...
* ...
*/
$sroles
function getSroles()
{
return $this->sroles;
}
public function getRoles()
{
$role_data = $this->sroles->toArray();
$roles = array();
foreach($role_data as $key=>$role)
{
$roles[] = $role->getName();
}
return $roles;
}
}
形式
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstName')
->add('lastName')
->add('address')
->add('phone')
->add('nic')
->add('email')
->add('password')
->add('isActive')
->add('sroles',EntityType::class, array('class'=>'AppBundle\Entity\Role',
'multiple'=>true,
'expanded'=>true,));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句