2017-07-29 50 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

相關問題