如何使用 fos user bundle 实现多用户支持

How to implement multi user support using fos user bundle

我一直在使用带有 fos 用户包的 symfony 3.4 框架开发一个多用户 Web 应用程序,以便轻松地操纵用户。 我已经集成了捆绑包并且一切正常,除了捆绑包功能在通过继承涉及多用户时不符合我的需要! 在 fos bundle 中实现多用户继承有什么技巧吗?

我尝试了很多不同的技巧,例如更改角色、更改用户模型界面、使用 symfony 组,但所有这些技巧似乎都不起作用! [以丑陋的方式] 解决我的问题的方法是更改​​鉴别器列的值。

  * @ORM\Table(name="fos_user")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="typeutilisateur", type="string")
  * @ORM\DiscriminatorMap({"Parent"="User","admin" = 

  "Administrateur","association"
    ="AsoociationsBundle\Entity\Association",
"Demandeurservice"="EldersStoryBundle\Entity\Demandeurservice",
     "Formateur"="FormationBundle\Entity\Formateur"
  ,"Prestataire"="AnnonceEldersCareBundle\Entity\Prestataireservice"})

 class User extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string
 *
 * @ORM\Column(name="nom", type="string", length=30, nullable=true)
 */
private $nom;

/**
 * @var string
 *
 * @ORM\Column(name="prenom", type="string", length=30, nullable=true)
 */
private $prenom;
/**
 * @var string
 *
 * @ORM\Column(name="adresse", type="string", length=50)
 */
private $adresse;
/**
 * @var string
 *
 * @ORM\Column(name="telephone", type="integer")
 */
private $telephone;
/**
 * @var string
 *
 * @ORM\Column(name="sexe", type="string", length=30, nullable=true)
 */
private $sexe;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="datecreation", type="datetime")
 */
private $datecreation;
/**
 * @var string
 *
 * @ORM\Column(name="avatar", type="string", length=255)
 */
private $avatar;

/**
 * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Group")
 * @ORM\JoinTable(name="fos_user_user_group",
 *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
 * )
 */
protected $groups;

public function __construct()
{
    parent::__construct();

}

}







/*This is the sub class*/



   <?php

 namespace EldersStoryBundle\Entity;

 use AppBundle\Entity\User;
  use Doctrine\ORM\Mapping as ORM;

 /**
   * Demandeurservice
   *
   * @ORM\Table(name="demandeurservice")
   * @ORM\Entity(repositoryClass="EldersStoryBundle\
   Repository\DemandeurserviceRepository")
   */
  class Demandeurservice extends User
  {


/**
 * @var string
 *
 * @ORM\Column(name="typemaladie", type="string", length=50)
 */
private $typemaladie;

/**
 * @var string
 *
 * @ORM\Column(name="descriptionmaladie", type="string", length=255)
 */

private $descriptionmaladie;

/**
 * @var string
 *
 * @ORM\Column(name="etatmaladie", type="string", length=255)
 */
private $etatmaladie;

/**
 * @var int
 *
 * @ORM\Column(name="pointelderly", type="integer")
 */
private $pointelderly;


 }

每次我订阅时,我都会得到 table 中的行,但有一个鉴别器列值 ="parent" 那么有什么主要的方法可以完成这项工作吗?或者至少改变鉴别器列的值?

删除 DiscriminatorMap。如果你不创建一个,Doctrine 会自动生成一个。只要您不乱用 Entity 对象的名称(即将 Person 更改为 Persona 或其他),那么这是您最好的选择。它也更加动态,因为 if/when 你添加了额外的类型,它会为你更新它(当缓存被删除时)。

See here,引用的最后一个要点:

If no discriminator map is provided, then the map is generated automatically. The automatically generated discriminator map contains the lowercase short name of each class as key.