如何使用fos用户捆绑包实施多用户支持

时间:2019-02-17 20:58:10

标签: doctrine-orm fosuserbundle symfony-3.4

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

我尝试了许多不同的技巧,例如更改角色,更改用户模型界面,使用symfony组,但是所有这些似乎都不起作用! 可以(以丑陋的方式)解决我的问题的是更改discriminator列的值。

  * @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;


 }

每次我订阅时,我都会获得表中的行,但具有区分符的列值=“ parent” 那么,有什么主要的方法可以做到这一点吗?还是至少要更改鉴别符列的值?

1 个答案:

答案 0 :(得分:0)

删除DiscriminatorMap。如果您不创建一个,那么Doc​​trine将自动生成一个。只要您不弄乱Entity对象的名称(例如,将Person更改为Persona或其他任何东西),那就是您的最佳选择。它也更具动态性,因为如果/当您添加其他类型时,它将为您更新(当删除缓存时)。

See here,最后引号为:

  

如果未提供区分图,则该图将自动生成。自动生成的鉴别符映射包含每个类的小写短名称作为键。