Symfony2从超类中确定并访问子类

时间:2013-10-30 12:40:58

标签: symfony inheritance orm doctrine-orm

我有3种可以登录我网站的“用户”:

  1. 员工
  2. 住房供应商
  3. 住房搜寻者
  4. 我让每个类扩展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);
    

    我如何确定它是哪个用户并随后访问该类型的用户特定属性?

    或者我错了吗?

1 个答案:

答案 0 :(得分:1)

一个简单的get_class($user)就可以了。它将为您提供给定类的名称。或$user instanceof ProviderUser(或任何其他歧视者)。

Doctrine将返回您在分辨符映射中定义的类型的实体。