为了账号安全,请及时绑定邮箱和手机立即绑定

教义实体扩展功能

教义实体扩展功能

PHP
GCT1015 2022-01-24 09:50:48
我将教义与 symfony 一起使用。我有实体User。我想为这个用户实体设置不同的类UserApi(->toArray()有一些数据),UserSite(->toArray()与另一个数据)UserAdmin(其他具体方法),该模型具有相同的数据(属性),但功能不同我怎么能得到那个?我不需要不同的模型。我想要一个模型和几个表示。
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

使用单表继承

模型将由鉴别器列分隔。


查看完整回答
反对 回复 2022-01-24
?
慕标5832272

TA贡献1966条经验 获得超4个赞

如果您使用的是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();

    }


}


查看完整回答
反对 回复 2022-01-24
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号