我创建了自己的用户包,扩展了 FOSUserBundle。
在我的 UserBundle 中,我有一个 memberID 字段,其中包含它的 setter 和 getter。
我已经可以使用 EntityManager 通过 memberID 找到用户,然后我可以通过 UserManager 找到用户,匹配通过 EntityManager 查询获得的用户名/电子邮件/...,但是...
有没有办法使用 UserManager 找到UserByMemberID?
谢谢你。
我创建了自己的用户包,扩展了 FOSUserBundle。
在我的 UserBundle 中,我有一个 memberID 字段,其中包含它的 setter 和 getter。
我已经可以使用 EntityManager 通过 memberID 找到用户,然后我可以通过 UserManager 找到用户,匹配通过 EntityManager 查询获得的用户名/电子邮件/...,但是...
有没有办法使用 UserManager 找到UserByMemberID?
谢谢你。
谢谢您的回复。它似乎比所有这些东西都容易。
自己的用户包:
/**
* @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*)) 您将获得用户实例。
每个“非标准”查询都必须写入存储库类
您还必须将该类与代表您的数据模型的类相关联。
假设你的实体被调用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();
您可以从捆绑包中的 FOSUserBundle 扩展 UserManager 并编写自己的方法。你可以按照这些说明http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes