2017-07-29 72 views
0

我有两个实体,即UserRole,它们之间具有多对多的关系。我生成了一个CRUD,并且它工作正常,但UserType表单渲染了一个用于为用户选择角色的选择菜单。因为我需要复选框insted的下拉的我做了以下修改我UserTypeSymfony“spl_object_hash()期望参数1为对象,给出的字符串”在编辑时使用表单实体类型

初始

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; 
     } 

我改变了上面的吸气如下

public function getRoles() 
    { 
     return $this->roles; 
    } 

简单地返回一个对象现在用户创建和编辑工作得很好,但由于getRoles我登录坏不再是返回一个数组

我真正想要的是使用复选框呈现UserType表单以选择角色,但是当我尝试这样做时发生了这种情况。到目前为止,我试图找到一个没有成功的解决方案。

回答

1

表单实体类型需要对象列表(角色实体)作为其值,但获取字符串列表为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,)); 
    } 
+0

您的解决方案完美的作品。但我仍然无法实现形式最初是如何工作的,甚至当getter返回一个数组时 – RanjanaLK

+0

对于一个新用户'getRoles'返回空数组,noth ING。所以没有什么可以按照形式进行处理。这就是表单为新用户工作的原因。 –

+0

我明白了,但编辑工作没有任何问题,当我用' - > add('roles')使用UserType类''。如何使用getter简单地返回一个数组? – RanjanaLK

相关问题