我们在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
或从中继承。