0

我正在尝试在实体类文件中使用实体管理器进行查询,但出现此错误:

FatalErrorException: Error: Call to undefined method Acme\MasoudBundle\Entity\User::getDoctrine() in /var/www/test/src/Acme/MasoudBundle/Entity/User.php line 192

我的实体类是:

namespace Acme\MasoudBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User implements AdvancedUserInterface, \Serializable
{
     /**
     * Set email
     *
     * @param string $email
     * @return User
     */
     public function setEmail($email)
     {
         $this->email = $email;

         return $this;
     }

    /**
     * Get email
     *
     * @return string 
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set isActive
     *
     * @param boolean $isActive
     * @return User
     */
    public function setIsActive($isActive)
    {
        $this->isActive = $isActive;

        return $this;
    }

    /**
     * Get isActive
     *
     * @return boolean 
     */
    public function getIsActive()
    {
        return $this->isActive;
    }
    /**
     * @inheritDoc
     */
    public function getRoles()
    {
        $em = $this->getDoctrine()->getManager();
        $Permission= $em->getRepository('MasoudBundle:Permission')->find(1);
        $this->permissions[]=$Permission->permission;
        return $this->permissions;
    }
}

我想要一个这样的权限和认证系统,你能帮我吗?有5个表,一个用户表,一个组表,一个权限表,一个group_permission和一个user_group表。所以用户登录后,我想检查哪个用户属于哪个组,并获得组权限。我怎样才能做到这一点?请尽可能多地帮助我。

4

3 回答 3

2

在这一行:

$em = $this->getDoctrine()->getManager();

$this指的是当前类,User Entity没有方法调用getDoctrine(). $this->getDoctrine()在控制器中工作,您可以在其中扩展包含该方法Controller的子类的类。ContainerAwaregetDoctrine()

换句话说,此方法仅适用于类容器或其子类的对象,例如: $controller->getDoctrine()->getManager().

此外,您不希望在您的实体类中有一个 EntityManager,这不是一个好方法。您最好使用侦听器来做这些事情

于 2013-11-10T15:58:29.600 回答
2

由于关注点分离,您的实体不应该知道其他实体和实体管理器

为什么不使用Doctrine Entity Relationships/AssociationsUser简单地将您的角色映射到适当的角色(在您的情况下为实体的实例) 。它将允许您从实例本身访问给定用户的适当权限。PermissionUser

于 2013-11-10T14:29:18.603 回答
1

我解决了这个问题:

global $kernel;
$em = $kernel->getContainer()->get('doctrine')->getManager();
$role = $em->getRepository('BackendBundle:user_types')->findOneBy(array(
            'id'    => 10
        ));
于 2017-12-17T23:47:51.133 回答