Symfony-带有教义的可选继承



我们在Symfony 5上遇到了继承问题。

我们创建了一个UserBundle捆绑包,其中包括一个简单的User实体(id、电子邮件、密码(:该捆绑包的目的是能够轻松地将其重新导入我们的各种项目中。

在一些项目中,我们希望扩展此实体以添加一些特定字段(电话、地址…(,但情况并非总是如此。

这是我们设置的代码:

用户捆绑包>用户类别:

<?php
namespace MyCompanyUserBundleEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentSecurityCoreUserUserInterface;
/**
* @ORMMappedSuperclass()
*/
class User implements UserInterface
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
...

继承的用户实体:

<?php
namespace AppEntity;
use MyCompanyUserBundleEntityUser as BaseUser;
use DoctrineORMMapping as ORM;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
/**
* @ORMEntity
* @UniqueEntity(fields={"email"})
*/
class User extends BaseUser
{
/**
* @ORMColumn(type="string", length=50)
*/
private $phone;
...

继承工作良好:问题来自于捆绑包的User实体对我们来说足够的项目。=>束的User类被定义为Mapped superclass,以便能够扩展它,但如果没有从中继承的类,Doctrine就不能创建关联表…

我们可以在src/中系统地创建一个空的User类,它继承了捆绑包的User类,但对我来说这似乎不是很干净…

我写了这篇文章,但似乎不起作用:条令继承替代

有人能帮我们解决这个问题吗?我想必须有一个解决方案。。。

提前谢谢!

下面的想法行不通。

正如@Cerad已经指出的,最好的方法可能是在每个应用程序中定义具体的User。这也是FOSUserBundle的作用。


我会采用以下方法:声明映射的超类抽象。

/**
* @ORMMappedSuperclass()
*/
abstract class AbstractBaseUser implements UserInterface
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
...

并在捆绑包中实现一个具体的空子类User

/**
* @ORMEntity
*/
class User extends AbstractBaseUser
{
}

这样,每个应用程序都可以使用库的User或从中继承。

相关内容

  • 没有找到相关文章

最新更新