我有一个班级用户和两个孩子班级 Prestataire 和 Membre 。 我做了一个映射歧视。
Class User.php
namespace Annuaire\AnnuaireBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use \Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity(repositoryClass="UserRepository")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type_user", type="string")
* @ORM\DiscriminatorMap({"admin" = "User", "membre" = "Membre", "prestataire" = "Prestataire"})
*/
class User extends BaseUser
{
const Type_USER = 'admin';
const Type_PRESTATAIRE = 'prestataire';
const Type_MEMBRE = 'membre';
public function __construct() {
parent::__construct();
$this->typeUser = User::Type_USER;
$this->dateInscr = new DateTime();
$this->confInscr = false;
$this->banni = false;
$this->nmbEssais = null;
$this->images = new ArrayCollection();
}
....
function getTypeuser() {
return $this->typeUser;
}
function setTypeuser($typeUser) {
$this->typeUser = $typeUser;
}
Class Prestataire.php
namespace Annuaire\AnnuaireBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="Annuaire\AnnuaireBundle\Entity\PrestataireReposito ry")
*/
class Prestataire extends User
{
public function __construct() {
$this->typeUser = User::Type_PRESTATAIRE;
$this->stages = new ArrayCollection();
$this->promos = new ArrayCollection();
$this->categories = new ArrayCollection();
$this->favorites = new ArrayCollection();
parent::__construct();
}
Class Membre.php
namespace Annuaire\AnnuaireBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Membre extends User
{
public function __construct() {
$this->typeUser = User::Type_MEMBRE;
$this->notes = new ArrayCollection();
$this->favorites = new ArrayCollection();
parent::__construct();
}
当用户登录时,他选择两种用户类型中的一种。因此,类型的参数由URL register / prestataire 或 register / membre 发送。 而且我不知道如何通过FOSUserBundle在DataBase中设置Type。