2012-07-19 28 views
2

我創建了自己的用戶包,擴展了FOSUserBundle。Symfony2 - FOSUserBundle - FindUserBy <field_in_custom_UserBundle>

在我的UserBundle中,我有一個memberID字段,它的setter和getters。

我已經可以找到使用的EntityManager由MEMBERID用戶,然後我能找到的UserManager通過匹配用戶的用戶名/電子郵件/ ......與EntityManager的查詢獲得的,但是......

是否有辦法使用UserManager找到UserByMemberID?

謝謝。

回答

6

謝謝您的答覆。看起來這比所有這些東西都容易。

OwnUserBundle:

/** 
* @ORM\Column(type="string") 
* 
*/ 
protected $memberID; 

public function getMemberID() 
{ 
    return $this->memberID; 
} 

public function setMemberID($memberID) 
{ 
    $this->memberID = $memberID; 
} 

可以查詢FOSUserBundle:

$userManager = $this->get('fos_user.user_manager'); 

$user = $userManager->findUserBy(array('memberID' => '123')); 

然後,使用方法findUserBy(陣列(* OwnUserBundle_field * => * search_parameter_value *))you'll得到用戶/實例。

1

每一個查詢是「不標準」的一個已被寫入到倉儲類
你必須也涉及此類和一個表示你的數據模型。

假設你的實體被稱爲User,你必須做這樣的事情

/** 
* VendorName\UserBundle\Entity\User 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="VendorName\UserBundle\Repository\UserRepository") 
*/ 
class User implements AdvancedUserInterface 
{ 
[...] 

這是說每一個「自定義」查詢該實體將適合到倉庫類。

現在,你必須創建存儲庫

class UserRepository extends EntityRepository implements UserProviderInterface 
{ 
    public function findUserByMemberID($id) 
    { 
     /* your logic here */ 
    } 
[...] 

,你可以使用下列方式

$userRepo = $this->em->getRepository('VendorUserBundle:User'); 
$userRepo->findUserByMemberID();