我有3种可以登录我网站的“用户”:
我让每个类扩展User Master类,它实现了Symfony2 AdvancedUserInterface
/**
* @ORM\Entity
* @ORM\Table(name="acme_users")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"provider" = "ProviderUser", "seeker" = "SeekerUser", "staff" = "StaffUser"})
*/
class User extends AdvancedUserInterface, \Serializable
{
//---
}
/**
* @ORM\Entity
* @ORM\Table(name="acme_seeker_users")
*/
class SeekerUser extends User
{
//---
}
/**
* @ORM\Entity
* @ORM\Table(name="acme_provider_users")
*/
class ProviderUser extends User
{
//---
}
/**
* @ORM\Entity
* @ORM\Table(name="acme_staff_users")
*/
class StaffUser extends User
{
//---
}
每种类型的用户都具有不同的属性,同时继承了主用户类的一些常见属性。
我的问题是,如何从主用户类中确定和访问子类?
所以,我说我在控制器中得到了这样的用户用户:
// get logged in user
$user = $this->get('security.context')->getToken()->getUser();
// get any user by $id
$user = $this->getDoctrine()->getRepository('acmeUserBundle:User')->findOneById($id);
我如何确定它是哪个用户并随后访问该类型的用户特定属性?
或者我错了吗?
答案 0 :(得分:1)
一个简单的get_class($user)
就可以了。它将为您提供给定类的名称。或$user instanceof ProviderUser
(或任何其他歧视者)。
Doctrine将返回您在分辨符映射中定义的类型的实体。