我有user entity
个自定义存储库。我创建了一个事件监听器来检查给定用户是否有权访问给定的游戏帐户。
为此我在我的用户存储库中创建了自定义函数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
功能。
// 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");
}
返回:
尝试调用名为&#34; hasAccountOfId&#34;的未定义方法。班级 &#34;的appbundle \实体\用户&#34;
使用!$userEm->hasAccountOfId($id)
会导致:
注意:未定义的属性:AppBundle \ Entity \ UserRepository :: $ accounts
如何访问$user = $this->token_storage->getToken()->getUser()
的用户存储库?
答案 0 :(得分:2)
首先,对于这个简单的OneToMany关联,您需要提供关系的Owning
方(在Account
类中)。为Account
创建新的User
您需要致电$account->setUser($user);
以制作Relation
。
其次,您不需要在RepositoryClass
中使用自定义方法,因为您将从Doctrine的关系中获取帐户:$user->getAccounts()
。
要Accounts
寻找ID
的迭代不应该在RepositoryClass
或Entity
本身,而是使用Manager Service
或别的东西,因为其他方式会违反Singe Responsibility Principle
。
最后,类属性或方法没有.
,它必须是->
。请注意if
方法中的hasAccountOfId
语句。