Symfony 2-实体存储库-从存储库访问实体数据
我有Symfony 2-实体存储库-从存储库访问实体数据,symfony,Symfony,我有用户实体,它有自定义存储库。我已经创建了一个事件侦听器来检查给定的用户是否有权访问给定的游戏帐户 为此,我在我的用户存储库中创建了自定义函数hasAccountOfId($id)。但是,我在从事件侦听器访问此函数时遇到问题 用户实体: /** * @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository") * @ORM\Table(name="fos_user") */ class Us
用户实体
,它有自定义存储库。我已经创建了一个事件侦听器来检查给定的用户是否有权访问给定的游戏帐户
为此,我在我的用户存储库中创建了自定义函数hasAccountOfId($id)
。但是,我在从事件侦听器访问此函数时遇到问题
用户实体:
/**
* @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository")
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/.../
/**
* @ORM\OneToMany(targetEntity="Account", mappedBy="user")
*/
protected $accounts;
用户实体自定义存储库:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\EntityRepository;
/**
* UserRepository
*/
class UserRepository extends EntityRepository
{
public function hasAccountOfId($accountId)
{
foreach ($this->accounts as $account) {
if ($account.id == $accountId) {
return true;
}
}
return false;
}
}
返回:
试图调用类的名为“hasAccountOfId”的未定义方法
“AppBundle\Entity\User”
使用时$userEm->hasAccountOfId($id)
结果是:
注意:未定义的属性:AppBundle\Entity\UserRepository::$accounts
如何访问用户存储库中的$user=$this->token\u storage->getToken()->getUser()
所有者
方面(在帐户
类中)。通过为用户
创建新的帐户
,您需要调用$Account->setUser($User)
以建立关系
RepositoryClass
中使用自定义方法,因为您将从条令的关系中获取帐户:$user->getAccounts()
Accounts
查找ID
的迭代不应在RepositoryClass
或实体
本身中进行,而应使用Manager服务
或其他方式,因为其他方式将违反单一责任原则
最后,类属性或方法没有
,它必须是->
。注意如果hasAccountOfId
方法中的语句。检查文档中的存储库类感谢您提供的线索,我已经根据此文档创建了存储库,但我的问题与基于从$this->token\u storage->getToken()->getUser()收到的用户信息访问此存储库有关。错误表示存储库类中存在未定义的属性$accounts
。您需要编写查询来检查所提供的ID是否存在。检查DQL
我想在此函数中访问的文档$accounts from class User。我应该将“用户对象(用户实体)”传递给“实体存储库”吗?或者可能有一个函数允许我访问给定实体的存储库?是的,只需将用户实体或其ID传递给该函数。您已经可以访问存储库类$userEm
,这是访问实体存储库类的正确方法。
// Account is set, verify if user is authorized
$id = $this->session->get("accountId");
$user = $this->token_storage->getToken()->getUser();
$userEm = $this->em->getRepository('AppBundle:User');
if(!$user->hasAccountOfId($id))
{
// Not authorized
die("Not authorized");
}