Как реализовать многопользовательскую поддержку, используя пакет пользователя fos - PullRequest
0 голосов
/ 17 февраля 2019

Я работал над многопользовательским веб-приложением, использующим фреймворк Symfony 3.4 с пакетом fos user, чтобы легко манипулировать пользователями.Я интегрировал пакет, и все работает нормально, за исключением того, что функции пакета не соответствуют моим потребностям, когда речь идет о многопользовательском использовании по наследству!Есть ли хитрость для реализации многопользовательского наследования в пакете FOS?

Я пробовал много разных приемов, таких как изменение ролей, изменение интерфейса пользовательской модели, использование групп 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;


 }

Каждый раз, когда я подписываюсь, я получаю строку в таблице, но со значением столбца дискриминатора = "parent "Так есть ли какой-нибудь важный способ сделать это?или хотя бы изменить значение столбца дискриминатора?

1 Ответ

0 голосов
/ 20 февраля 2019

Удалить DiscriminatorMap.Если вы не создадите его, Doctrine сгенерирует его автоматически.До тех пор, пока вы не возитесь с именами объектов Entity (то есть измените Person на Persona или что-то еще), тогда это ваш лучший выбор.Это также более динамично, потому что, если / когда вы добавляете дополнительные типы, он обновит его для вас (когда кеш удален).

См. Здесь , последняя точка цитирования:

Если карта дискриминатора не указана, карта генерируется автоматически.Автоматически сгенерированная карта дискриминатора содержит краткое имя каждого класса в нижнем регистре в качестве ключа.

...