【问题标题】:Properties of an entity in a different entity不同实体中的实体的属性
【发布时间】:2013-05-26 11:35:55
【问题描述】:

我正在使用 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;
}

【问题讨论】:

  • 你有什么问题?
  • 我需要告诉 FOSUserBundle 不是从用户实体获取用户名和电子邮件,而是必须转到另一个实体“UserMeta”,进行查询以检索所有用户元数据并获取只有 typeMeta 等于 name 的那个。
  • 但它必须适用于登录、注销、注册、配置文件等

标签: symfony doctrine-orm entity fosuserbundle


【解决方案1】:

使用 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

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多