2013-05-30 3 views
1

Я использую FOSUserBundle для управления пользователями и безопасностью. У меня также есть другая таблица, в которой хранятся все метаданные пользователя, такие как изображение профиля, идентификатор facebook и т. Д.Свойства объекта в другом объекте

Мне нужно сообщить FOSUserBundle, что вместо того, чтобы получать имя пользователя и электронную почту от пользовательской сущности, оно имеет перейти к другому объекту «UserMeta», сделав запрос для извлечения всех метаданных пользователя и возьмите только тот, который имеет типMeta, равный имени.

что-то вроде:

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

Что такое ваш вопрос? – cheesemacfly

+0

Мне нужно сообщить FOSUserBundle, что вместо того, чтобы получать имя пользователя и адрес электронной почты от пользовательского объекта, он должен перейти к другому объекту «UserMeta», создав запрос для извлечения всех метаданных пользователя и возьмите только тот, который имеет типMeta равнозначно. – 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

Смежные вопросы