2

FOSUserBundleを拡張して、独自のユーザーバンドルを作成しました。

UserBundleには、setterとgetterを含むmemberIDフィールドがあります。

EntityManagerを使用してmemberIDでユーザーを既に見つけることができます。次に、そのEntityManagerクエリで取得したusername / email / ...に一致するUserManagerを介してユーザーを見つけることができますが、...

UserManagerを使用してUserByMemberIDを見つける方法はありますか?

ありがとうございました。

4

3 に答える 3

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(array(* OwnUserBundle_field * => * search_parameter_value *))を使用して、ユーザーのインスタンスを取得します。

于 2012-07-20T14:02:28.027 に答える
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();
于 2012-07-20T10:42:37.183 に答える
0

バンドル内のFOSUserBundleからUserManagerを拡張して、独自のメソッドを作成できます。そして、あなたはこれらの指示に従うことができますhttp://symfony.com/doc/current/book/doctrine.html#custom-repository-classes

于 2012-07-19T15:47:33.157 に答える