【问题标题】:Symfony2 determine and access subclass from superclassSymfony2 从超类确定和访问子类
【发布时间】:2013-10-30 12:40:58
【问题描述】:

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

  1. 员工
  2. 住房供应商
  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);

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

还是说我做错了?

【问题讨论】:

    标签: symfony inheritance orm doctrine-orm


    【解决方案1】:

    一个简单的get_class($user) 就可以解决问题。它将为您提供给定类的名称。或$user instanceof ProviderUser(或任何其他鉴别器)。

    Doctrine 将返回您在鉴别器映射中定义的类型的实体。

    【讨论】:

    • +1 没错,但尽量避免使用 get_class,instanceof 是要走的路。
    • 哇,这么简单。教义确实可以很好地处理繁重的工作!谢谢@Rene!
    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 2013-03-24
    • 2017-09-13
    • 2018-10-14
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多