2013-05-30 43 views
1

我正在使用FOSUserBundle來管理用戶和安全性。我也有一個不同的表格,包含用戶的所有元數據,如個人資料圖片,Facebook ID等。實體在不同實體中的屬性

我需要告訴FOSUserBundle,它不是從用戶實體獲取用戶名和電子郵件,而是去一個不同的實體'UserMeta',做一個查詢來檢索所有的用戶元數據,並只取得一個typeMeta等於name的那個。

類似:

public function getUsername(){ 
    $metas = $this->getMetas(); 
    foreach($metas as $meta){ 
     if($meta->getTypeMeta() == '_name'){ 
     return $meta->getContent(); 
     } 
    } 
    return null; 
} 
+0

什麼是你的問題? – cheesemacfly

+0

我需要告訴FOSUserBundle,它不必從用戶實體獲取用戶名和電子郵件,它必須轉到另一個實體「UserMeta」,進行查詢以檢索所有用戶元數據,並只取得一個具有typeMeta的元素等於名字。 – Nico

+0

但它必須爲登錄,註銷,註冊,配置文件等工作 – Nico

回答

0

您使用FOSUserBundle是使用自定義的存儲層最好的選擇。

您的代碼會去如下:

abstract class CustomUser implements UserInterface 
{ 
    public function getUsername(){ 
     $metas = $this->getMetas(); 
     foreach($metas as $meta){ 
      if($meta->getTypeMeta() == '_name'){ 
      return $meta->getContent(); 
      } 
     } 
     return null; 
    } 
    //.... 
} 

和你config.yml在:

fos_user: 
    db_driver: custom 
    user_class: Acme\YourBundle\Model\CustomUser 
    service: 
     user_manager: acme_user.custom_manager 
    firewall_name: main 

全部可用文檔在這裏:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/custom_storage_layer.md