教义实体扩展功能

我将教义与 symfony 一起使用。我有实体User

我想为这个用户实体设置不同的

  • UserApi->toArray()有一些数据),

  • UserSite->toArray()与另一个数据

  • UserAdmin其他具体方法),

该模型具有相同的数据(属性),但功能不同

我怎么能得到那个?


我不需要不同的模型。

我想要一个模型和几个表示。


GCT1015
浏览 191回答 2
2回答

红颜莎娜

使用单表继承。模型将由鉴别器列分隔。

慕标5832272

如果您使用的是FOS/user-bundle您可以授予用户角色,您可以创建自己的或使用预定义的(Admin 是预定义的)。 https://symfony.com/doc/2.0.x/bundles/FOSUserBundle/index.html如果您真的想自己这样做,您可以拥有一个模型但不同的实例化是您将您的用户设置为是否具有角色的布尔值,然后在根据角色请求时创建一个新对象:/** * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") * @ORM\Table(name="users") */class User{    /** @Column(name="`isApiUser`", type="boolean") */    private $isApiUser;    /** @Column(name="`isSiteUser`", type="boolean") */    private $isSiteUser;    /** @Column(name="`isAdminUser`", type="boolean") */    private $isAdminUser;    //....    public function getApiUser(): ?ApiUser    {        return $this->isApiUser() ? new ApiUser($this) : null;    }    public function getSiteUser(): SiteUser    {        return $this->isSiteUser() ? new SiteUser($this) : null;    }    public function getAdminUser(): ApiUser    {        return $this->isAdminUser() ? new AdminUser($this);    }    //....}然后让每个用户对象执行以下操作:class ApiUser{    private $userName;    public function __construct(User $user)    {        $this->userName = $user->getUserName();        // Continue for whatever logic you want    }}对每个用户类型执行相同的操作。然后当你想在你的控制器(或任何地方)中使用它时class SomeController extends Controller{    public function indexAction()    {        $repository = $this->getDoctrine()->getRepository(User::class);        $user = $product = $repository->findOneBy([            'userName' => 'UserName',             'isApiUser' => true        ]);        $apiUser = $this->getApiUser();    }}
打开App,查看更多内容
随时随地看视频慕课网APP