1

我正在使用 FOSUserBundle 来管理用户和安全性。我还有一个不同的表,其中包含用户的所有元数据,例如个人资料图片、facebook id 等。

我需要告诉 FOSUserBundle,它不必从用户实体获取用户名和电子邮件,而是必须转到不同的实体“UserMeta”,进行查询以检索所有用户元数据并仅获取具有 typeMeta 等于的那个命名。

就像是:

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

1 回答 1

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

于 2013-05-30T20:56:09.787 回答