我正在使用FOSUserBundle来管理用户和安全性。我还有一个不同的表格,其中包含用户的所有元数据,如个人资料图片,脸谱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 :(得分: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