当使用表单实体类型进行编辑时,Symfony“spl_object_hash() 期望参数 1 为对象,给出字符串”

兰佳娜

我有两个实体,即UserRole具有许多在它们之间一对多的关系。我生成了一个 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带有用于选择角色的复选框表单,但是当我尝试这样做时发生了这种情况。到目前为止,我试图找到一个没有任何成功的解决方案。

马克斯·P。

表单实体类型期望对象列表(角色实体)作为其值,但获取字符串列表作为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章